diff options
Diffstat (limited to 'net/openbgpd/files/patch-bgpd_kroute.c')
-rw-r--r-- | net/openbgpd/files/patch-bgpd_kroute.c | 191 |
1 files changed, 130 insertions, 61 deletions
diff --git a/net/openbgpd/files/patch-bgpd_kroute.c b/net/openbgpd/files/patch-bgpd_kroute.c index c8df99557adb..f66f1819c955 100644 --- a/net/openbgpd/files/patch-bgpd_kroute.c +++ b/net/openbgpd/files/patch-bgpd_kroute.c @@ -2,13 +2,13 @@ Index: bgpd/kroute.c =================================================================== RCS file: /home/cvs/private/hrs/openbgpd/bgpd/kroute.c,v retrieving revision 1.1.1.1 -retrieving revision 1.4 -diff -u -p -r1.1.1.1 -r1.4 +retrieving revision 1.5 +diff -u -p -r1.1.1.1 -r1.5 --- bgpd/kroute.c 30 Jun 2009 05:46:15 -0000 1.1.1.1 -+++ bgpd/kroute.c 9 Jul 2009 17:35:40 -0000 1.4 ++++ bgpd/kroute.c 10 Aug 2009 21:20:05 -0000 1.5 @@ -1,4 +1,4 @@ -/* $OpenBSD: kroute.c,v 1.160 2008/05/09 12:45:25 henning Exp $ */ -+/* $OpenBSD: kroute.c,v 1.169 2009/06/25 15:54:22 claudio Exp $ */ ++/* $OpenBSD: kroute.c,v 1.172 2009/07/23 14:53:20 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -180,7 +180,25 @@ diff -u -p -r1.1.1.1 -r1.4 break; case IMSG_CTL_KROUTE_ADDR: if (imsg->hdr.len != IMSG_HEADER_SIZE + -@@ -791,6 +805,14 @@ kroute_compare(struct kroute_node *a, st +@@ -573,11 +587,17 @@ kr_show_route(struct imsg *imsg) + case AF_INET: + kr = h->kroute; + snh.valid = kroute_validate(&kr->r); ++ snh.krvalid = 1; ++ memcpy(&snh.kr.kr4, &kr->r, ++ sizeof(snh.kr.kr4)); + ifindex = kr->r.ifindex; + break; + case AF_INET6: + kr6 = h->kroute; + snh.valid = kroute6_validate(&kr6->r); ++ snh.krvalid = 1; ++ memcpy(&snh.kr.kr6, &kr6->r, ++ sizeof(snh.kr.kr6)); + ifindex = kr6->r.ifindex; + break; + } +@@ -791,6 +811,14 @@ kroute_compare(struct kroute_node *a, st return (-1); if (a->r.prefixlen > b->r.prefixlen) return (1); @@ -195,7 +213,7 @@ diff -u -p -r1.1.1.1 -r1.4 return (0); } -@@ -810,6 +832,14 @@ kroute6_compare(struct kroute6_node *a, +@@ -810,32 +838,42 @@ kroute6_compare(struct kroute6_node *a, return (-1); if (a->r.prefixlen > b->r.prefixlen) return (1); @@ -210,7 +228,46 @@ diff -u -p -r1.1.1.1 -r1.4 return (0); } -@@ -853,27 +883,62 @@ kif_compare(struct kif_node *a, struct k + int + knexthop_compare(struct knexthop_node *a, struct knexthop_node *b) + { +- u_int32_t r; ++ int i; + + if (a->nexthop.af != b->nexthop.af) + return (b->nexthop.af - a->nexthop.af); + + switch (a->nexthop.af) { + case AF_INET: +- if ((r = b->nexthop.addr32[0] - a->nexthop.addr32[0]) != 0) +- return (r); ++ if (ntohl(a->nexthop.v4.s_addr) < ntohl(b->nexthop.v4.s_addr)) ++ return (-1); ++ if (ntohl(a->nexthop.v4.s_addr) > ntohl(b->nexthop.v4.s_addr)) ++ return (1); + break; + case AF_INET6: +- if ((r = b->nexthop.addr32[3] - a->nexthop.addr32[3]) != 0) +- return (r); +- if ((r = b->nexthop.addr32[2] - a->nexthop.addr32[2]) != 0) +- return (r); +- if ((r = b->nexthop.addr32[1] - a->nexthop.addr32[1]) != 0) +- return (r); +- if ((r = b->nexthop.addr32[0] - a->nexthop.addr32[0]) != 0) +- return (r); ++ for (i = 0; i < 16; i++) { ++ if (a->nexthop.v6.s6_addr[i] < b->nexthop.v6.s6_addr[i]) ++ return (-1); ++ if (a->nexthop.v6.s6_addr[i] > b->nexthop.v6.s6_addr[i]) ++ return (1); ++ } + break; ++ default: ++ fatalx("knexthop_compare: unknown AF"); + } + + return (0); +@@ -853,27 +891,62 @@ kif_compare(struct kif_node *a, struct k */ struct kroute_node * @@ -223,7 +280,8 @@ diff -u -p -r1.1.1.1 -r1.4 s.r.prefix.s_addr = prefix; s.r.prefixlen = prefixlen; + s.r.priority = prio; -+ + +- return (RB_FIND(kroute_tree, &krt, &s)); + kn = RB_FIND(kroute_tree, &krt, &s); + if (kn && prio == RTP_ANY) { + tmp = RB_PREV(kroute_tree, &krt, kn); @@ -242,8 +300,7 @@ diff -u -p -r1.1.1.1 -r1.4 +kroute_matchgw(struct kroute_node *kr, struct sockaddr_in *sa_in) +{ + in_addr_t nexthop; - -- return (RB_FIND(kroute_tree, &krt, &s)); ++ + if (sa_in == NULL) { + log_warnx("kroute_matchgw: no nexthop defined"); + return (NULL); @@ -280,7 +337,7 @@ diff -u -p -r1.1.1.1 -r1.4 } if (kr->r.flags & F_KERNEL) { -@@ -888,29 +953,61 @@ kroute_insert(struct kroute_node *kr) +@@ -888,29 +961,61 @@ kroute_insert(struct kroute_node *kr) if (kif_kr_insert(kr) == -1) return (-1); @@ -346,7 +403,7 @@ diff -u -p -r1.1.1.1 -r1.4 kr_redistribute(IMSG_NETWORK_REMOVE, &kr->r); if (kr->r.flags & F_CONNECTED) -@@ -933,27 +1030,62 @@ kroute_clear(void) +@@ -933,27 +1038,62 @@ kroute_clear(void) } struct kroute6_node * @@ -359,7 +416,8 @@ diff -u -p -r1.1.1.1 -r1.4 memcpy(&s.r.prefix, prefix, sizeof(struct in6_addr)); s.r.prefixlen = prefixlen; + s.r.priority = prio; -+ + +- return (RB_FIND(kroute6_tree, &krt6, &s)); + kn6 = RB_FIND(kroute6_tree, &krt6, &s); + if (kn6 && prio == RTP_ANY) { + tmp = RB_PREV(kroute6_tree, &krt6, kn6); @@ -390,8 +448,7 @@ diff -u -p -r1.1.1.1 -r1.4 + return (kr); + kr = kr->next; + } - -- return (RB_FIND(kroute6_tree, &krt6, &s)); ++ + return (NULL); } @@ -416,7 +473,7 @@ diff -u -p -r1.1.1.1 -r1.4 } if (kr->r.flags & F_KERNEL) { -@@ -970,7 +1102,9 @@ kroute6_insert(struct kroute6_node *kr) +@@ -970,7 +1110,9 @@ kroute6_insert(struct kroute6_node *kr) if (kif_kr6_insert(kr) == -1) return (-1); @@ -427,7 +484,7 @@ diff -u -p -r1.1.1.1 -r1.4 } return (0); -@@ -979,21 +1113,51 @@ kroute6_insert(struct kroute6_node *kr) +@@ -979,21 +1121,51 @@ kroute6_insert(struct kroute6_node *kr) int kroute6_remove(struct kroute6_node *kr) { @@ -482,7 +539,15 @@ diff -u -p -r1.1.1.1 -r1.4 kr_redistribute6(IMSG_NETWORK_REMOVE, &kr->r); if (kr->r.flags & F_CONNECTED) -@@ -1374,6 +1538,46 @@ knexthop_validate(struct knexthop_node * +@@ -1020,6 +1192,7 @@ knexthop_find(struct bgpd_addr *addr) + { + struct knexthop_node s; + ++ bzero(&s, sizeof(s)); + memcpy(&s.nexthop, addr, sizeof(s.nexthop)); + + return (RB_FIND(knexthop_tree, &knt, &s)); +@@ -1374,6 +1547,46 @@ knexthop_validate(struct knexthop_node * } } @@ -529,7 +594,7 @@ diff -u -p -r1.1.1.1 -r1.4 struct kroute_node * kroute_match(in_addr_t key, int matchall) { -@@ -1385,13 +1589,13 @@ kroute_match(in_addr_t key, int matchall +@@ -1385,13 +1598,13 @@ kroute_match(in_addr_t key, int matchall /* we will never match the default route */ for (i = 32; i > 0; i--) @@ -546,7 +611,7 @@ diff -u -p -r1.1.1.1 -r1.4 if (matchall || bgpd_filternexthop(&kr->r, NULL) == 0) return (kr); -@@ -1408,13 +1612,13 @@ kroute6_match(struct in6_addr *key, int +@@ -1408,13 +1621,13 @@ kroute6_match(struct in6_addr *key, int /* we will never match the default route */ for (i = 128; i > 0; i--) { inet6applymask(&ina, key, i); @@ -562,7 +627,7 @@ diff -u -p -r1.1.1.1 -r1.4 if (matchall || bgpd_filternexthop(NULL, &kr6->r) == 0) return (kr6); -@@ -1456,7 +1660,6 @@ kroute_detach_nexthop(struct knexthop_no +@@ -1456,7 +1669,6 @@ kroute_detach_nexthop(struct knexthop_no kn->kroute = NULL; } @@ -570,7 +635,7 @@ diff -u -p -r1.1.1.1 -r1.4 /* * misc helpers */ -@@ -1568,15 +1771,6 @@ mask2prefixlen6(struct sockaddr_in6 *sa_ +@@ -1568,15 +1780,6 @@ mask2prefixlen6(struct sockaddr_in6 *sa_ return (l); } @@ -586,7 +651,7 @@ diff -u -p -r1.1.1.1 -r1.4 struct in6_addr * prefixlen2mask6(u_int8_t prefixlen) { -@@ -1593,25 +1787,8 @@ prefixlen2mask6(u_int8_t prefixlen) +@@ -1593,25 +1796,8 @@ prefixlen2mask6(u_int8_t prefixlen) return (&mask); } @@ -614,7 +679,7 @@ diff -u -p -r1.1.1.1 -r1.4 void get_rtaddrs(int addrs, struct sockaddr *sa, struct sockaddr **rti_info) -@@ -1622,7 +1799,7 @@ get_rtaddrs(int addrs, struct sockaddr * +@@ -1622,7 +1808,7 @@ get_rtaddrs(int addrs, struct sockaddr * if (addrs & (1 << i)) { rti_info[i] = sa; sa = (struct sockaddr *)((char *)(sa) + @@ -623,7 +688,7 @@ diff -u -p -r1.1.1.1 -r1.4 } else rti_info[i] = NULL; } -@@ -1747,7 +1924,9 @@ send_rtmsg(int fd, int action, struct kr +@@ -1747,7 +1933,9 @@ send_rtmsg(int fd, int action, struct kr struct sockaddr_in prefix; struct sockaddr_in nexthop; struct sockaddr_in mask; @@ -633,7 +698,7 @@ diff -u -p -r1.1.1.1 -r1.4 int iovcnt = 0; if (kr_state.fib_sync == 0) -@@ -1757,9 +1936,13 @@ send_rtmsg(int fd, int action, struct kr +@@ -1757,9 +1945,13 @@ send_rtmsg(int fd, int action, struct kr bzero(&hdr, sizeof(hdr)); hdr.rtm_version = RTM_VERSION; hdr.rtm_type = action; @@ -647,23 +712,23 @@ diff -u -p -r1.1.1.1 -r1.4 if (kroute->flags & F_BLACKHOLE) hdr.rtm_flags |= RTF_BLACKHOLE; if (kroute->flags & F_REJECT) -@@ -1809,6 +1992,7 @@ send_rtmsg(int fd, int action, struct kr +@@ -1808,6 +2000,7 @@ send_rtmsg(int fd, int action, struct kr + iov[iovcnt].iov_base = &mask; iov[iovcnt++].iov_len = sizeof(mask); - if (kroute->labelid) { +#if !defined(__FreeBSD__) /* FreeBSD has no route labeling. */ + if (kroute->labelid) { bzero(&label, sizeof(label)); label.sr_len = sizeof(label); - strlcpy(label.sr_label, rtlabel_id2name(kroute->labelid), -@@ -1819,6 +2003,7 @@ send_rtmsg(int fd, int action, struct kr - /* adjust iovec */ +@@ -1820,6 +2013,7 @@ send_rtmsg(int fd, int action, struct kr iov[iovcnt].iov_base = &label; iov[iovcnt++].iov_len = sizeof(label); -+#endif /* !defined(__FreeBSD__) */ } ++#endif /* !defined(__FreeBSD__) */ retry: -@@ -1857,10 +2042,13 @@ send_rt6msg(int fd, int action, struct k + if (writev(fd, iov, iovcnt) == -1) { +@@ -1857,10 +2051,13 @@ send_rt6msg(int fd, int action, struct k { struct iovec iov[5]; struct rt_msghdr hdr; @@ -680,7 +745,7 @@ diff -u -p -r1.1.1.1 -r1.4 int iovcnt = 0; if (kr_state.fib_sync == 0) -@@ -1870,7 +2058,9 @@ send_rt6msg(int fd, int action, struct k +@@ -1870,7 +2067,9 @@ send_rt6msg(int fd, int action, struct k bzero(&hdr, sizeof(hdr)); hdr.rtm_version = RTM_VERSION; hdr.rtm_type = action; @@ -690,7 +755,7 @@ diff -u -p -r1.1.1.1 -r1.4 hdr.rtm_flags = RTF_PROTO1; if (kroute->flags & F_BLACKHOLE) hdr.rtm_flags |= RTF_BLACKHOLE; -@@ -1885,44 +2075,46 @@ send_rt6msg(int fd, int action, struct k +@@ -1885,44 +2084,46 @@ send_rt6msg(int fd, int action, struct k iov[iovcnt++].iov_len = sizeof(hdr); bzero(&prefix, sizeof(prefix)); @@ -752,7 +817,7 @@ diff -u -p -r1.1.1.1 -r1.4 if (kroute->labelid) { bzero(&label, sizeof(label)); label.sr_len = sizeof(label); -@@ -1935,6 +2127,7 @@ send_rt6msg(int fd, int action, struct k +@@ -1935,6 +2136,7 @@ send_rt6msg(int fd, int action, struct k iov[iovcnt].iov_base = &label; iov[iovcnt++].iov_len = sizeof(label); } @@ -760,7 +825,7 @@ diff -u -p -r1.1.1.1 -r1.4 retry: if (writev(fd, iov, iovcnt) == -1) { -@@ -1949,7 +2142,7 @@ retry: +@@ -1949,7 +2151,7 @@ retry: kroute->prefixlen); return (0); } else { @@ -769,7 +834,7 @@ diff -u -p -r1.1.1.1 -r1.4 "prefix %s/%u: %s", hdr.rtm_type, log_in6addr(&kroute->prefix), kroute->prefixlen, strerror(errno)); -@@ -1957,7 +2150,7 @@ retry: +@@ -1957,7 +2159,7 @@ retry: } break; default: @@ -778,7 +843,7 @@ diff -u -p -r1.1.1.1 -r1.4 hdr.rtm_type, log_in6addr(&kroute->prefix), kroute->prefixlen, strerror(errno)); return (0); -@@ -1970,8 +2163,8 @@ retry: +@@ -1970,8 +2172,8 @@ retry: int fetchtable(u_int rtableid, int connected_only) { @@ -789,7 +854,7 @@ diff -u -p -r1.1.1.1 -r1.4 char *buf, *next, *lim; struct rt_msghdr *rtm; struct sockaddr *sa, *gw, *rti_info[RTAX_MAX]; -@@ -1986,9 +2179,8 @@ fetchtable(u_int rtableid, int connected +@@ -1986,9 +2188,8 @@ fetchtable(u_int rtableid, int connected mib[3] = 0; mib[4] = NET_RT_DUMP; mib[5] = 0; @@ -800,7 +865,7 @@ diff -u -p -r1.1.1.1 -r1.4 if (rtableid != 0 && errno == EINVAL) /* table nonexistent */ return (0); log_warn("sysctl"); -@@ -1998,7 +2190,7 @@ fetchtable(u_int rtableid, int connected +@@ -1998,7 +2199,7 @@ fetchtable(u_int rtableid, int connected log_warn("fetchtable"); return (-1); } @@ -809,7 +874,7 @@ diff -u -p -r1.1.1.1 -r1.4 log_warn("sysctl"); free(buf); return (-1); -@@ -2007,7 +2199,13 @@ fetchtable(u_int rtableid, int connected +@@ -2007,7 +2208,13 @@ fetchtable(u_int rtableid, int connected lim = buf + len; for (next = buf; next < lim; next += rtm->rtm_msglen) { rtm = (struct rt_msghdr *)next; @@ -824,7 +889,7 @@ diff -u -p -r1.1.1.1 -r1.4 get_rtaddrs(rtm->rtm_addrs, sa, rti_info); if ((sa = rti_info[RTAX_DST]) == NULL) -@@ -2016,10 +2214,6 @@ fetchtable(u_int rtableid, int connected +@@ -2016,10 +2223,6 @@ fetchtable(u_int rtableid, int connected if (rtm->rtm_flags & RTF_LLINFO) /* arp cache */ continue; @@ -835,27 +900,31 @@ diff -u -p -r1.1.1.1 -r1.4 switch (sa->sa_family) { case AF_INET: if ((kr = calloc(1, sizeof(struct kroute_node))) == -@@ -2030,6 +2224,9 @@ fetchtable(u_int rtableid, int connected +@@ -2030,6 +2233,11 @@ fetchtable(u_int rtableid, int connected } kr->r.flags = F_KERNEL; -+#if !defined(__FreeBSD__) /* no rtm_priority on FreeBSD */ ++#if defined(__FreeBSD__) /* no rtm_priority on FreeBSD */ + kr->r.priority = RTP_BGP; ++#else ++ kr->r.priority = rtm->rtm_priority; +#endif kr->r.ifindex = rtm->rtm_index; kr->r.prefix.s_addr = ((struct sockaddr_in *)sa)->sin_addr.s_addr; -@@ -2062,6 +2259,9 @@ fetchtable(u_int rtableid, int connected +@@ -2062,6 +2270,11 @@ fetchtable(u_int rtableid, int connected } kr6->r.flags = F_KERNEL; -+#if !defined(__FreeBSD__) /* no rtm_priority on FreeBSD */ -+ kr->r.priority = RTP_BGP; ++#if defined(__FreeBSD__) /* no rtm_priority on FreeBSD */ ++ kr6->r.priority = RTP_BGP; ++#else ++ kr6->r.priority = rtm->rtm_priority; +#endif kr6->r.ifindex = rtm->rtm_index; memcpy(&kr6->r.prefix, &((struct sockaddr_in6 *)sa)->sin6_addr, -@@ -2113,7 +2313,12 @@ fetchtable(u_int rtableid, int connected +@@ -2113,7 +2326,12 @@ fetchtable(u_int rtableid, int connected } if (sa->sa_family == AF_INET) { @@ -869,7 +938,7 @@ diff -u -p -r1.1.1.1 -r1.4 send_rtmsg(kr_state.fd, RTM_DELETE, &kr->r); free(kr); } else if (connected_only && -@@ -2122,7 +2327,12 @@ fetchtable(u_int rtableid, int connected +@@ -2122,7 +2340,12 @@ fetchtable(u_int rtableid, int connected else kroute_insert(kr); } else if (sa->sa_family == AF_INET6) { @@ -883,7 +952,7 @@ diff -u -p -r1.1.1.1 -r1.4 send_rt6msg(kr_state.fd, RTM_DELETE, &kr6->r); free(kr6); } else if (connected_only && -@@ -2234,12 +2444,18 @@ dispatch_rtmsg(void) +@@ -2234,12 +2457,18 @@ dispatch_rtmsg(void) lim = buf + n; for (next = buf; next < lim; next += rtm->rtm_msglen) { rtm = (struct rt_msghdr *)next; @@ -903,7 +972,7 @@ diff -u -p -r1.1.1.1 -r1.4 get_rtaddrs(rtm->rtm_addrs, sa, rti_info); if (rtm->rtm_pid == kr_state.pid) /* cause by us */ -@@ -2252,12 +2468,14 @@ dispatch_rtmsg(void) +@@ -2252,12 +2481,14 @@ dispatch_rtmsg(void) continue; connected_only = 0; @@ -918,7 +987,7 @@ diff -u -p -r1.1.1.1 -r1.4 if (dispatch_rtmsg_addr(rtm, rti_info, connected_only) == -1) -@@ -2289,9 +2507,10 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt +@@ -2289,9 +2520,10 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt struct kroute_node *kr; struct kroute6_node *kr6; struct bgpd_addr prefix; @@ -930,7 +999,7 @@ diff -u -p -r1.1.1.1 -r1.4 flags = F_KERNEL; ifindex = 0; -@@ -2309,7 +2528,16 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt +@@ -2309,7 +2541,16 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt flags |= F_REJECT; if (rtm->rtm_flags & RTF_DYNAMIC) flags |= F_DYNAMIC; @@ -947,7 +1016,7 @@ diff -u -p -r1.1.1.1 -r1.4 prefix.af = sa->sa_family; switch (prefix.af) { case AF_INET: -@@ -2341,22 +2569,54 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt +@@ -2341,22 +2582,54 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt return (0); } @@ -1004,7 +1073,7 @@ diff -u -p -r1.1.1.1 -r1.4 if (kroute6_remove(kr6) == -1) return (-1); break; -@@ -2364,15 +2624,6 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt +@@ -2364,15 +2637,6 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt return (0); } @@ -1020,7 +1089,7 @@ diff -u -p -r1.1.1.1 -r1.4 if (connected_only && !(flags & F_CONNECTED)) return (0); -@@ -2385,8 +2636,18 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt +@@ -2385,8 +2649,18 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt switch (prefix.af) { case AF_INET: sa_in = (struct sockaddr_in *)sa; @@ -1040,7 +1109,7 @@ diff -u -p -r1.1.1.1 -r1.4 if (sa_in != NULL) kr->r.nexthop.s_addr = sa_in->sin_addr.s_addr; -@@ -2409,12 +2670,15 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt +@@ -2409,12 +2683,15 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt kr_redistribute(IMSG_NETWORK_ADD, &kr->r); } @@ -1056,7 +1125,7 @@ diff -u -p -r1.1.1.1 -r1.4 if ((kr = calloc(1, sizeof(struct kroute_node))) == NULL) { log_warn("dispatch_rtmsg"); -@@ -2428,14 +2692,25 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt +@@ -2428,14 +2705,25 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt kr->r.nexthop.s_addr = 0; kr->r.flags = flags; kr->r.ifindex = ifindex; @@ -1083,7 +1152,7 @@ diff -u -p -r1.1.1.1 -r1.4 if (sa_in6 != NULL) memcpy(&kr6->r.nexthop, &sa_in6->sin6_addr, -@@ -2461,12 +2736,15 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt +@@ -2461,12 +2749,15 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt kr_redistribute6(IMSG_NETWORK_ADD, &kr6->r); } @@ -1099,7 +1168,7 @@ diff -u -p -r1.1.1.1 -r1.4 if ((kr6 = calloc(1, sizeof(struct kroute6_node))) == NULL) { log_warn("dispatch_rtmsg"); -@@ -2483,6 +2761,7 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt +@@ -2483,6 +2774,7 @@ dispatch_rtmsg_addr(struct rt_msghdr *rt sizeof(struct in6_addr)); kr6->r.flags = flags; kr6->r.ifindex = ifindex; |