i'm hacking on pfsync(4) at the moment, and i wasted way too much time wondering how i broke the pfsync ioctls after i didn't the pfsync_status output. turns out if you don't have a sync interface set, it skips output.
i think it's useful to show that the sync interface is not set, so i came up with this. an unconfigured pfsync interface looks like this with my diff: pfsync0: flags=0<> mtu 1500 index 5 priority 0 llprio 3 pfsync: syncdev none maxupd 128 defer off groups: carp pfsync Index: ifconfig.c =================================================================== RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v retrieving revision 1.457 diff -u -p -r1.457 ifconfig.c --- ifconfig.c 26 Oct 2022 17:06:31 -0000 1.457 +++ ifconfig.c 8 Nov 2022 14:06:01 -0000 @@ -5086,22 +5086,23 @@ setpfsync_defer(const char *val, int d) void pfsync_status(void) { - struct pfsyncreq preq; + struct pfsyncreq pfsyncr; + const char *syncif = "none"; - bzero(&preq, sizeof(struct pfsyncreq)); - ifr.ifr_data = (caddr_t)&preq; + bzero(&pfsyncr, sizeof(pfsyncr)); + ifr.ifr_data = (caddr_t)&pfsyncr; if (ioctl(sock, SIOCGETPFSYNC, (caddr_t)&ifr) == -1) return; - if (preq.pfsyncr_syncdev[0] != '\0') { - printf("\tpfsync: syncdev: %s ", preq.pfsyncr_syncdev); - if (preq.pfsyncr_syncpeer.s_addr != htonl(INADDR_PFSYNC_GROUP)) - printf("syncpeer: %s ", - inet_ntoa(preq.pfsyncr_syncpeer)); - printf("maxupd: %d ", preq.pfsyncr_maxupdates); - printf("defer: %s\n", preq.pfsyncr_defer ? "on" : "off"); - } + if (pfsyncr.pfsyncr_syncdev[0] != '\0') + syncif = pfsyncr.pfsyncr_syncdev; + + printf("\tpfsync: syncdev %s ", syncif); + if (pfsyncr.pfsyncr_syncpeer.s_addr != htonl(INADDR_PFSYNC_GROUP)) + printf("syncpeer %s ", inet_ntoa(pfsyncr.pfsyncr_syncpeer)); + printf("maxupd %d ", pfsyncr.pfsyncr_maxupdates); + printf("defer %s\n", pfsyncr.pfsyncr_defer ? "on" : "off"); } void