Date: Fri, 16 Mar 2018 14:47:34 +0100 (CET) From: sthaug@nethelp.no To: "Andrey V. Elsukov" <bu7cher@yandex.ru> Cc: melifaro@ipfw.ru, freebsd-net@freebsd.org Subject: Re: Does FreeBSD do proactive ARP refresh?,Re: Does FreeBSD do proactive ARP refresh? Message-ID: <20180316.144734.78772139.sthaug@nethelp.no> In-Reply-To: <21eca372-6fc0-6c86-4ca8-a398bfa37d92@yandex.ru> References: <20180316.122720.71152047.sthaug@nethelp.no> <20180316.124748.104098359.sthaug@nethelp.no> <21eca372-6fc0-6c86-4ca8-a398bfa37d92@yandex.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
> >> And thank you for that suggestion! The packet loss during ARP refresh > >> (of the destination address connected to the output interface) does > >> *not* happen when the box is forwarding! It only happens with locally > >> generated traffic. > > > > Checking once per second with "arp -n <destination IP>" I can see the > > following behavior with net.link.ether.inet.max_age=120: > > > > - Locally generated traffic: The ARP entry is refreshed after > > net.link.ether.inet.max_age seconds - which presumably means it > > actually expires first. And there is some packet loss. > > > > - Transit traffic (the box is forwarding): The ARP entry is refreshed > > 5 seconds *before* net.link.ether.inet.max_age has passed, and there > > is no packet loss. > > Can you test this patch? I did not tested it, but I think it should fix > this issue. Looks like this is a patch against HEAD. I don't have any boxes running HEAD, but I can get one installed and test the patch this weekend (unless you want to produce a patch against 11.1-STABLE). I tried the patch manually applied on 11.1-STABLE, but got lots of errors during kernel compilation (see the end of this message). Steinar Haug, Nethelp consulting, sthaug@nethelp.no ---------------------------------------------------------------------- cc -c -O2 -pipe -fno-strict-aliasing -g -nostdinc -I. -I../../.. -I../../../contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -MD -MF.depend.if_ethersubr.o -MTif_ethersubr.o -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -gdwarf-2 -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -Wno-error-pointer-sign -Wno-error-shift-negative-value -Wno-error-address-of-packed-member -mno-aes -mno-avx -std=iso9899:1999 -Werror ../../../net/if_ethersubr.c ../../../net/if_ethersubr.c:288:18: error: unused variable 't' [-Werror,-Wunused-variable] struct pf_mtag *t; ^ ../../../net/if_ethersubr.c:286:7: error: unused variable 'linkhdr' [-Werror,-Wunused-variable] char linkhdr[ETHER_HDR_LEN], *phdr; ^ ../../../net/if_ethersubr.c:285:6: error: unused variable 'error' [-Werror,-Wunused-variable] int error = 0; ^ ../../../net/if_ethersubr.c:289:6: error: unused variable 'loop_copy' [-Werror,-Wunused-variable] int loop_copy = 1; ^ ../../../net/if_ethersubr.c:287:23: error: unused variable 'eh' [-Werror,-Wunused-variable] struct ether_header *eh; ^ ../../../net/if_ethersubr.c:293:18: error: unused variable 'rt0' [-Werror,-Wunused-variable] struct rtentry *rt0 = NULL; ^ ../../../net/if_ethersubr.c:335:4: error: control reaches end of non-void function [-Werror,-Wreturn-type] } ^ ../../../net/if_ethersubr.c:336:3: error: extraneous closing brace ('}') } ^ ../../../net/if_ethersubr.c:337:3: error: type specifier missing, defaults to 'int' [-Werror,-Wimplicit-int] rt0 = ro->ro_rt; ^ ../../../net/if_ethersubr.c:337:9: error: use of undeclared identifier 'ro' rt0 = ro->ro_rt; ^ ../../../net/if_ethersubr.c:338:2: error: extraneous closing brace ('}') } ^ ../../../net/if_ethersubr.c:341:2: error: type specifier missing, defaults to 'int' [-Werror,-Wimplicit-int] error = mac_ifnet_check_transmit(ifp, m); ^ ../../../net/if_ethersubr.c:341:35: error: use of undeclared identifier 'ifp' error = mac_ifnet_check_transmit(ifp, m); ^ ../../../net/if_ethersubr.c:341:40: error: use of undeclared identifier 'm' error = mac_ifnet_check_transmit(ifp, m); ^ ../../../net/if_ethersubr.c:342:2: error: expected identifier or '(' if (error) ^ ../../../net/if_ethersubr.c:343:3: error: expected identifier or '(' senderr(error); ^ ../../../net/if_ethersubr.c:123:49: note: expanded from macro 'senderr' #define senderr(e) do { error = (e); goto bad;} while (0) ^ ../../../net/if_ethersubr.c:347:2: error: expected identifier or '(' if (ifp->if_flags & IFF_MONITOR) ^ ../../../net/if_ethersubr.c:348:3: error: expected identifier or '(' senderr(ENETDOWN); ^ ../../../net/if_ethersubr.c:123:49: note: expanded from macro 'senderr' #define senderr(e) do { error = (e); goto bad;} while (0) ^ ../../../net/if_ethersubr.c:349:2: error: expected identifier or '(' if (!((ifp->if_flags & IFF_UP) && ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated. *** Error code 1 Stop. make: stopped in /usr/src/sys/amd64/compile/DNS_VIMAGE
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20180316.144734.78772139.sthaug>