linuxmaniac left a comment (open5gs/open5gs#3074)
After some debugging: ``` (gdb) p *((struct dict_application_data *)data) $33 = {application_id = 4, application_name = 0x7fffdc224000 "Diameter Credit Control Application"} (gdb) bt #0 fd_dict_new (dict=0x55555576cb70, type=type@entry=DICT_APPLICATION, data=data@entry=0x7fffffffde60, parent=parent@entry=0x0, ref=ref@entry=0x7fffffffdd40) at ./libfdproto/dictionary.c:1519 #1 0x00007fffdc21d23b in dict_dcca_entry (conffile=<optimized out>) at ./extensions/dict_dcca/dict_dcca.c:75 #2 0x00007ffff7282cae in fd_ext_load () from /lib/x86_64-linux-gnu/libfdcore.so.6 #3 0x00007ffff727b27d in fd_core_parseconf () from /lib/x86_64-linux-gnu/libfdcore.so.6 #4 0x00007ffff7e5a8ad in ogs_diam_init (mode=mode@entry=3, conffile=0x55555563b410 "/etc/freeDiameter/smf.conf", fd_config=fd_config@entry=0x5555555df760 <g_diam_conf>) at ../lib/diameter/common/init.c:51 #5 0x00005555555869dc in smf_fd_init () at ../src/smf/fd-path.c:34 #6 0x00005555555624c6 in smf_initialize () at ../src/smf/init.c:78 #7 0x0000555555561fc6 in app_initialize (argv=argv@entry=0x7fffffffe290) at ../src/smf/app.c:26 #8 0x0000555555561e46 in main (argc=<optimized out>, argv=0x7fffffffe498) at ../src/main.c:219 (gdb) c Continuing.
Thread 1 "open5gs-smfd" hit Breakpoint 3, fd_dict_new (dict=0x55555576cb70, type=type@entry=DICT_APPLICATION, data=data@entry=0x7fffffffdc80, parent=0x5555557edc60, ref=ref@entry=0x0) at ./libfdproto/dictionary.c:1519 1519 { (gdb) bt #0 fd_dict_new (dict=0x55555576cb70, type=type@entry=DICT_APPLICATION, data=data@entry=0x7fffffffdc80, parent=0x5555557edc60, ref=ref@entry=0x0) at ./libfdproto/dictionary.c:1519 #1 0x00007ffff7e6323a in ogs_dict_gx_entry (conffile=conffile@entry=0x0) at ../lib/diameter/gx/dict.c:154 #2 0x00007ffff7e64955 in ogs_diam_gx_init () at ../lib/diameter/gx/message.c:97 #3 0x000055555558eb69 in smf_gx_init () at ../src/smf/gx-path.c:1396 #4 0x00005555555869e9 in smf_fd_init () at ../src/smf/fd-path.c:38 #5 0x00005555555624c6 in smf_initialize () at ../src/smf/init.c:78 #6 0x0000555555561fc6 in app_initialize (argv=argv@entry=0x7fffffffe290) at ../src/smf/app.c:26 #7 0x0000555555561e46 in main (argc=<optimized out>, argv=0x7fffffffe498) at ../src/main.c:219 (gdb) p *((struct dict_application_data *)data) $34 = {application_id = 16777238, application_name = 0x7ffff7e67019 "Gx"} (gdb) c Continuing.
Thread 1 "open5gs-smfd" hit Breakpoint 1, ogs_dict_gy_entry (conffile=conffile@entry=0x0) at ../lib/diameter/gy/dict.c:147 147 { (gdb) c Continuing.
Thread 1 "open5gs-smfd" hit Breakpoint 3, fd_dict_new (dict=0x55555576cb70, type=type@entry=DICT_APPLICATION, data=data@entry=0x7fffffffde80, parent=parent@entry=0x0, ref=ref@entry=0x0) at ./libfdproto/dictionary.c:1519 1519 { (gdb) p *((struct dict_application_data *)data) $35 = {application_id = 4, application_name = 0x7ffff7e4f000 "Gy"} (gdb) [...] 1690 if (ret == EEXIST) { (gdb) 1692 switch (type) { (gdb) 1706 TRACE_DEBUG(FULL, "Application %s already in dictionary", new->data.application.application_name); (gdb) 1708 if (fd_os_cmp(locref->data.application.application_name, locref->datastr_len, (gdb) 1710 TRACE_DEBUG(FULL, "Conflicting application name"); (gdb) 1839 if (ref) (gdb) 1850 CHECK_MALLOC( dict_obj_info[CHECK_TYPE(type) ? type : 0].dump_data(&buf, &len, &offset, data) ); (gdb) 1853 TRACE_DEBUG(INFO, "An error occurred while adding the following data in the dictionary: %s", buf); (gdb) 1855 if (ret == EEXIST) { (gdb) 1856 offset=0; (gdb) 1857 CHECK_MALLOC( dump_object(&buf, &len, &offset, locref, 0, 0, 0) ); (gdb) 1858 TRACE_DEBUG(INFO, "Conflicting entry in the dictionary: %s", buf); (gdb) 1860 free(buf); (gdb) 1863 free(new); (gdb) 1864 return ret; ```
Now it's clear that ``application_id`` 4 is used twice: * https://github.com/freeDiameter/freeDiameter/blob/master/extensions/dict_dcc... ``` /* DCCA */ { struct dict_application_data data = { 4, "Diameter Credit Control Application" }; CHECK_dict_new( DICT_APPLICATION, &data, NULL, &dcca); } ``` * https://github.com/open5gs/open5gs/blob/main/lib/diameter/gy/message.c#L89 ``` int ogs_diam_gy_init(void) { application_id_t id = OGS_DIAM_GY_APPLICATION_ID;
ogs_assert(ogs_dict_gy_entry(NULL) == 0); ``` defined at: https://github.com/open5gs/open5gs/blob/main/lib/diameter/gy/message.h#L34 ``` /* Gy interface, 3GPP TS 32.299 */
#define OGS_DIAM_GY_APPLICATION_ID 4 ```