/* * setup peer dstadr field keeping it in sync with the interface * structures */ void set_peerdstadr(struct peer *peer, struct interface *interface) { 004186E0 push esi 004186E1 mov esi,eax if (peer->dstadr != interface) { 004186E3 mov eax,dword ptr [esi+88h] 004186E9 cmp eax,edi 004186EB je set_peerdstadr+133h (418813h) if (interface != NULL && (peer->cast_flags & MDF_BCLNT) && (interface->flags & INT_MCASTIF) && peer->burst) { 004186F1 test edi,edi 004186F3 je set_peerdstadr+37h (418717h) 004186F5 test byte ptr [esi+0A0h],20h 004186FC je set_peerdstadr+37h (418717h) 004186FE test dword ptr [edi+1ACh],100h 00418708 je set_peerdstadr+37h (418717h) 0041870A cmp dword ptr [esi+184h],0 00418711 jne set_peerdstadr+133h (418813h) /* * don't accept updates to a true multicast * reception interface while a BCLNT peer is * running it's unicast protocol */ return; } if (peer->dstadr != NULL) { 00418717 test eax,eax 00418719 je set_peerdstadr+0E3h (4187C3h) peer->dstadr->peercnt--; 0041871F or ecx,0FFFFFFFFh 00418722 add dword ptr [eax+1E0h],ecx ISC_LIST_UNLINK_TYPE(peer->dstadr->peers, peer, ilink, struct peer); 00418728 mov eax,dword ptr [esi+90h] 0041872E mov edx,dword ptr [esi+8Ch] 00418734 test eax,eax 00418736 je set_peerdstadr+60h (418740h) 00418738 mov dword ptr [eax+8Ch],edx 0041873E jmp set_peerdstadr+6Ch (41874Ch) 00418740 mov eax,dword ptr [esi+88h] 00418746 mov dword ptr [eax+1DCh],edx 0041874C mov eax,dword ptr [esi+8Ch] 00418752 mov edx,dword ptr [esi+90h] 00418758 test eax,eax 0041875A je set_peerdstadr+84h (418764h) 0041875C mov dword ptr [eax+90h],edx 00418762 jmp set_peerdstadr+90h (418770h) 00418764 mov eax,dword ptr [esi+88h] 0041876A mov dword ptr [eax+1D8h],edx 00418770 mov dword ptr [esi+8Ch],ecx 00418776 mov dword ptr [esi+90h],ecx msyslog(LOG_INFO, "%s interface %s -> %s", stoa(&peer->srcadr), stoa(&peer->dstadr->sin), (interface != NULL) ? stoa(&interface->sin) : "(null)"); 0041877C test edi,edi 0041877E je set_peerdstadr+0AEh (41878Eh) 00418780 lea eax,[edi+8] 00418783 push eax 00418784 call socktoa (43BF30h) 00418789 add esp,4 0041878C jmp set_peerdstadr+0B3h (418793h) 0041878E mov eax,offset string "(null)" (474FB0h) 00418793 mov ecx,dword ptr [esi+88h] 00418799 push eax 0041879A add ecx,8 0041879D push ecx 0041879E call socktoa (43BF30h) 004187A3 add esp,4 004187A6 push eax 004187A7 lea edx,[esi+8] 004187AA push edx 004187AB call socktoa (43BF30h) 004187B0 add esp,4 004187B3 push eax 004187B4 push offset string "%s interface %s -> %s" (474FB8h) 004187B9 push 6 004187BB call msyslog (433B10h) 004187C0 add esp,14h } peer->dstadr = interface; 004187C3 mov dword ptr [esi+88h],edi if (peer->dstadr != NULL) { 004187C9 test edi,edi 004187CB je set_peerdstadr+133h (418813h) ISC_LIST_APPEND(peer->dstadr->peers, peer, ilink); 004187CD mov eax,dword ptr [edi+1DCh] 004187D3 test eax,eax 004187D5 je set_peerdstadr+0FFh (4187DFh) 004187D7 mov dword ptr [eax+90h],esi 004187DD jmp set_peerdstadr+105h (4187E5h) 004187DF mov dword ptr [edi+1D8h],esi 004187E5 mov eax,dword ptr [esi+88h] 004187EB mov ecx,dword ptr [eax+1DCh] 004187F1 mov dword ptr [esi+8Ch],ecx 004187F7 mov dword ptr [esi+90h],0 00418801 mov dword ptr [eax+1DCh],esi peer->dstadr->peercnt++; 00418807 mov esi,dword ptr [esi+88h] 0041880D inc dword ptr [esi+1E0h] 00418813 pop esi } } } 00418814 ret total size with doubly-linked is 418814 - 4186e0 == 308 octets