| 838 | } |
| 839 | |
| 840 | static void |
| 841 | vxlan_ftable_entry_dump(struct vxlan_ftable_entry *fe, struct sbuf *sb) |
| 842 | { |
| 843 | char buf[64]; |
| 844 | const union vxlan_sockaddr *sa; |
| 845 | const void *addr; |
| 846 | int i, len, af, width; |
| 847 | |
| 848 | sa = &fe->vxlfe_raddr; |
| 849 | af = sa->sa.sa_family; |
| 850 | len = sbuf_len(sb); |
| 851 | |
| 852 | sbuf_printf(sb, "%c 0x%02X ", VXLAN_FE_IS_DYNAMIC(fe) ? 'D' : 'S', |
| 853 | fe->vxlfe_flags); |
| 854 | |
| 855 | for (i = 0; i < ETHER_ADDR_LEN - 1; i++) |
| 856 | sbuf_printf(sb, "%02X:", fe->vxlfe_mac[i]); |
| 857 | sbuf_printf(sb, "%02X ", fe->vxlfe_mac[i]); |
| 858 | |
| 859 | if (af == AF_INET) { |
| 860 | addr = &sa->in4.sin_addr; |
| 861 | width = INET_ADDRSTRLEN - 1; |
| 862 | } else { |
| 863 | addr = &sa->in6.sin6_addr; |
| 864 | width = INET6_ADDRSTRLEN - 1; |
| 865 | } |
| 866 | inet_ntop(af, addr, buf, sizeof(buf)); |
| 867 | sbuf_printf(sb, "%*s ", width, buf); |
| 868 | |
| 869 | sbuf_printf(sb, "%08jd", (intmax_t)fe->vxlfe_expire); |
| 870 | |
| 871 | sbuf_putc(sb, '\n'); |
| 872 | |
| 873 | /* Truncate a partial line. */ |
| 874 | if (sbuf_error(sb) != 0) |
| 875 | sbuf_setpos(sb, len); |
| 876 | } |
| 877 | |
| 878 | static struct vxlan_socket * |
| 879 | vxlan_socket_alloc(const union vxlan_sockaddr *sa) |
no test coverage detected