{"id":9673,"date":"2026-05-10T07:57:19","date_gmt":"2026-05-09T23:57:19","guid":{"rendered":"http:\/\/www.freesip.org\/?p=9673"},"modified":"2026-05-10T08:10:12","modified_gmt":"2026-05-10T00:10:12","slug":"kamailio-sip-server-initialization-and-configuration-flow","status":"publish","type":"post","link":"https:\/\/www.freesip.org\/?p=9673","title":{"rendered":"Kamailio SIP Server Initialization and Configuration Flow"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Kamailio SIP Server Initialization and Configuration Flow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This codemap traces the Kamailio SIP server&#8217;s initialization and configuration loading process, from main() through configuration parsing to socket setup. Key locations include the entry point [1a], configuration parsing invocation [1c], listen statement grammar rules [2a], socket_info structure definition [2d], and advanced features like advertised addresses [5a].<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Main Entry Point and Configuration Loading<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Traces the startup sequence from main() through configuration file parsing<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1a. Application Entry Point (<code>main.c:2198<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Main function begins Kamailio startup process<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int main(int argc, char **argv)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1b. Set Configuration Input (<code>main.c:2760<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Assign configuration file stream to parser<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yyin = cfg_stream;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1c. Parse Configuration (<code>main.c:2763<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Invoke Bison parser to process configuration file<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>r = yyparse();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1d. Validate Parsing Results (<code>main.c:2768<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Check for configuration parsing errors<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if((r != 0) || (cfg_errors) || (pp_ifdef_level_check() &lt; 0)) {<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Listen Statement Processing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Shows how configuration listen directives are parsed and converted to socket structures<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2a. Listen Grammar Rule (<code>cfg.y:1711<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Basic listen statement pattern matching in configuration grammar<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>| LISTEN EQUAL id_lst {<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2b. Add Listen Interface (<code>cfg.y:1713<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Create socket_info structure from parsed listen directive<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (add_listen_iface(    lst_tmp-&gt;addr_lst-&gt;name,<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2c. Socket Interface Creation (<code>socket_info.c:1244<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Function that creates and initializes socket_info structures<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int add_listen_iface(char *name, struct name_lst *addr_l, unsigned short port,<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2d. Socket Structure Definition (<code>ip_addr.h:149<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Core data structure holding network binding information<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>typedef struct socket_info<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Socket Information Management<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Demonstrates how socket_info structures store network configuration<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3a. Socket File Descriptor (<code>ip_addr.h:151<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Actual socket file descriptor for network communication<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int socket;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3b. Interface Name (<code>ip_addr.h:153<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hostname or IP address string representation<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>str name;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3c. IP Address Structure (<code>ip_addr.h:154<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Binary IP address representation<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct ip_addr address;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3d. Protocol Type (<code>ip_addr.h:162<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Protocol identifier (UDP\/TCP\/TLS\/SCTP)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>char proto;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3e. Worker Process Count (<code>ip_addr.h:167<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Number of worker processes for this socket<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int workers;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. Configuration Lexer Integration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Shows how the lexer tokenizes configuration files for the parser<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4a. Parser Header Include (<code>cfg.lex:42<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Include generated parser token definitions<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"cfg.tab.h\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4b. Parser Function Declaration (<code>main.c:546<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">External declaration of Bison-generated parser function<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>extern int yyparse(void);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4c. Lexer Input Stream (<code>main.c:545<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Global variable for lexer input source<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>extern FILE *yyin;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4d. Error Handler (<code>cfg.lex:47<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Custom error handling for lexer failures<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static void ksr_yy_fatal_error(const char* msg);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. Advanced Listen Features<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Illustrates complex listen directive processing with advertising and virtual sockets<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5a. Advertise Address Pattern (<code>cfg.y:1761<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Listen directive with external advertising address<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>| LISTEN EQUAL id_lst ADVERTISE listen_id COLON NUMBER {<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5b. Create Advertised Socket (<code>cfg.y:1763<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Add socket with external advertising information<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (add_listen_advertise_iface(    lst_tmp-&gt;addr_lst-&gt;name,<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5c. Advertising Information (<code>ip_addr.h:170<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Structure holding external address details<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct advertise_info useinfo;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5d. Virtual Socket Flag (<code>cfg.y:1725<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mark socket as virtual for internal routing<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>lst_tmp-&gt;flags |= SI_IS_VIRTUAL;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Kamailio SIP Server Initialization and Configuration Flow This codemap traces the Kamailio SIP server&#8217;s initialization and configuration loading process, from main() through configuration parsing to socket setup. Key locations include the entry point [1a], configuration parsing invocation [1c], listen statement grammar rules [2a], socket_info structure definition [2d], and advanced features like advertised addresses [5a]. 1. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,9],"tags":[],"class_list":["post-9673","post","type-post","status-publish","format-standard","hentry","category-kamailio","category-opensource"],"_links":{"self":[{"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/posts\/9673","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freesip.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9673"}],"version-history":[{"count":2,"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/posts\/9673\/revisions"}],"predecessor-version":[{"id":9676,"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/posts\/9673\/revisions\/9676"}],"wp:attachment":[{"href":"https:\/\/www.freesip.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9673"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freesip.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9673"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freesip.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}