summaryrefslogtreecommitdiff
path: root/zebra/kernel_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/kernel_socket.c')
-rw-r--r--zebra/kernel_socket.c58
1 files changed, 23 insertions, 35 deletions
diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c
index bcd92e15fe..7212ed6f26 100644
--- a/zebra/kernel_socket.c
+++ b/zebra/kernel_socket.c
@@ -111,7 +111,7 @@ extern struct zebra_privs_t zserv_privs;
*/
#if defined(HAVE_STRUCT_SOCKADDR_SA_LEN)
#define SAROUNDUP(X) ROUNDUP(((struct sockaddr *)(X))->sa_len)
-#elif defined(HAVE_IPV6)
+#else
/*
* One would hope all fixed-size structure definitions are aligned,
* but round them up nonetheless.
@@ -123,12 +123,6 @@ extern struct zebra_privs_t zserv_privs;
ROUNDUP(sizeof(struct sockaddr_in6)) : \
(((struct sockaddr *)(X))->sa_family == AF_LINK ? \
ROUNDUP(sizeof(struct sockaddr_dl)) : sizeof(struct sockaddr))))
-#else /* HAVE_IPV6 */
-#define SAROUNDUP(X) \
- (((struct sockaddr *)(X))->sa_family == AF_INET ? \
- ROUNDUP(sizeof(struct sockaddr_in)):\
- (((struct sockaddr *)(X))->sa_family == AF_LINK ? \
- ROUNDUP(sizeof(struct sockaddr_dl)) : sizeof(struct sockaddr)))
#endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */
#endif /* !SA_SIZE */
@@ -299,10 +293,8 @@ af_check (int family)
{
if (family == AF_INET)
return 1;
-#ifdef HAVE_IPV6
if (family == AF_INET6)
return 1;
-#endif /* HAVE_IPV6 */
return 0;
}
@@ -332,7 +324,7 @@ ifan_read (struct if_announcemsghdr *ifan)
{
struct interface *ifp;
- ifp = if_lookup_by_index (ifan->ifan_index);
+ ifp = if_lookup_by_index (ifan->ifan_index, VRF_DEFAULT);
if (ifp)
assert ( (ifp->ifindex == ifan->ifan_index)
@@ -349,7 +341,8 @@ ifan_read (struct if_announcemsghdr *ifan)
/* Create Interface */
ifp = if_get_by_name_len(ifan->ifan_name,
strnlen(ifan->ifan_name,
- sizeof(ifan->ifan_name)));
+ sizeof(ifan->ifan_name)),
+ VRF_DEFAULT, 0);
ifp->ifindex = ifan->ifan_index;
if_get_metric (ifp);
@@ -468,7 +461,7 @@ ifm_read (struct if_msghdr *ifm)
* messages, such as up/down status changes on NetBSD, do not include a
* sockaddr_dl).
*/
- if ( (ifp = if_lookup_by_index (ifm->ifm_index)) != NULL )
+ if ( (ifp = if_lookup_by_index (ifm->ifm_index, VRF_DEFAULT)) != NULL )
{
/* we have an ifp, verify that the name matches as some systems,
* eg Solaris, have a 1:many association of ifindex:ifname
@@ -495,7 +488,7 @@ ifm_read (struct if_msghdr *ifm)
* be filled in.
*/
if ( (ifp == NULL) && ifnlen)
- ifp = if_lookup_by_name (ifname);
+ ifp = if_lookup_by_name (ifname, VRF_DEFAULT);
/*
* If ifp still does not exist or has an invalid index (IFINDEX_INTERNAL),
@@ -525,7 +518,7 @@ ifm_read (struct if_msghdr *ifm)
if (ifp == NULL)
{
/* Interface that zebra was not previously aware of, so create. */
- ifp = if_create (ifname, ifnlen);
+ ifp = if_create (ifname, ifnlen, VRF_DEFAULT);
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug ("%s: creating ifp for ifindex %d",
__func__, ifm->ifm_index);
@@ -682,9 +675,7 @@ ifam_read_mesg (struct ifa_msghdr *ifm,
switch (family)
{
case AF_INET:
-#ifdef HAVE_IPV6
case AF_INET6:
-#endif
{
char buf[4][INET6_ADDRSTRLEN];
zlog_debug ("%s: ifindex %d, ifname %s, ifam_addrs 0x%x, "
@@ -733,7 +724,7 @@ ifam_read (struct ifa_msghdr *ifam)
/* Allocate and read address information. */
ifam_read_mesg (ifam, &addr, &mask, &brd, ifname, &ifnlen);
- if ((ifp = if_lookup_by_index(ifam->ifam_index)) == NULL)
+ if ((ifp = if_lookup_by_index(ifam->ifam_index, VRF_DEFAULT)) == NULL)
{
zlog_warn ("%s: no interface for ifname %s, index %d",
__func__, ifname, ifam->ifam_index);
@@ -772,7 +763,6 @@ ifam_read (struct ifa_msghdr *ifam)
ip_masklen (mask.sin.sin_addr),
&brd.sin.sin_addr);
break;
-#ifdef HAVE_IPV6
case AF_INET6:
/* Unset interface index from link-local address when IPv6 stack
is KAME. */
@@ -792,7 +782,6 @@ ifam_read (struct ifa_msghdr *ifam)
ip6_masklen (mask.sin6.sin6_addr),
&brd.sin6.sin6_addr);
break;
-#endif /* HAVE_IPV6 */
default:
/* Unsupported family silently ignore... */
break;
@@ -838,9 +827,8 @@ rtm_read_mesg (struct rt_msghdr *rtm,
/* rt_msghdr version check. */
if (rtm->rtm_version != RTM_VERSION)
- zlog (NULL, LOG_WARNING,
- "Routing message version different %d should be %d."
- "This may cause problem\n", rtm->rtm_version, RTM_VERSION);
+ zlog_warn("Routing message version different %d should be %d." "This may cause problem\n",
+ rtm->rtm_version, RTM_VERSION);
/* Be sure structure is cleared */
memset (dest, 0, sizeof (union sockunion));
@@ -864,7 +852,7 @@ rtm_read_mesg (struct rt_msghdr *rtm,
/* Assert read up to the end of pointer. */
if (pnt != end)
- zlog (NULL, LOG_WARNING, "rtm_read() doesn't read all socket data.");
+ zlog_warn("rtm_read() doesn't read all socket data.");
return rtm->rtm_flags;
}
@@ -939,7 +927,7 @@ rtm_read (struct rt_msghdr *rtm)
int ret;
if (! IS_ZEBRA_DEBUG_RIB)
return;
- ret = rib_lookup_ipv4_route (&p, &gate, VRF_DEFAULT);
+ ret = rib_lookup_ipv4_route ((struct prefix_ipv4 *)&p, &gate, VRF_DEFAULT);
prefix2str (&p, buf, sizeof(buf));
switch (rtm->rtm_type)
{
@@ -963,7 +951,7 @@ rtm_read (struct rt_msghdr *rtm)
case ZEBRA_RIB_FOUND_EXACT: /* RIB RR == FIB RR */
zlog_debug ("%s: %s %s: done Ok",
__func__, lookup (rtm_type_str, rtm->rtm_type), buf);
- rib_lookup_and_dump (&p, VRF_DEFAULT);
+ rib_lookup_and_dump ((struct prefix_ipv4 *)&p, VRF_DEFAULT);
return;
break;
}
@@ -976,18 +964,18 @@ rtm_read (struct rt_msghdr *rtm)
case ZEBRA_RIB_FOUND_EXACT:
zlog_debug ("%s: %s %s: desync: RR is still in RIB, while already not in FIB",
__func__, lookup (rtm_type_str, rtm->rtm_type), buf);
- rib_lookup_and_dump (&p, VRF_DEFAULT);
+ rib_lookup_and_dump ((struct prefix_ipv4 *)&p, VRF_DEFAULT);
break;
case ZEBRA_RIB_FOUND_CONNECTED:
case ZEBRA_RIB_FOUND_NOGATE:
zlog_debug ("%s: %s %s: desync: RR is still in RIB, plus gate differs",
__func__, lookup (rtm_type_str, rtm->rtm_type), buf);
- rib_lookup_and_dump (&p, VRF_DEFAULT);
+ rib_lookup_and_dump ((struct prefix_ipv4 *)&p, VRF_DEFAULT);
break;
case ZEBRA_RIB_NOTFOUND: /* RIB RR == FIB RR */
zlog_debug ("%s: %s %s: done Ok",
__func__, lookup (rtm_type_str, rtm->rtm_type), buf);
- rib_lookup_and_dump (&p, VRF_DEFAULT);
+ rib_lookup_and_dump ((struct prefix_ipv4 *)&p, VRF_DEFAULT);
return;
break;
}
@@ -1004,17 +992,17 @@ rtm_read (struct rt_msghdr *rtm)
*/
if (rtm->rtm_type == RTM_CHANGE)
rib_delete (AFI_IP, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL,
- 0, zebra_flags, &p, NULL, 0, 0);
+ 0, zebra_flags, &p, NULL, NULL, 0, 0);
union g_addr ggate = { .ipv4 = gate.sin.sin_addr };
if (rtm->rtm_type == RTM_GET
|| rtm->rtm_type == RTM_ADD
|| rtm->rtm_type == RTM_CHANGE)
rib_add (AFI_IP, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL, 0, zebra_flags,
- &p, &ggate, NULL, 0, 0, 0, 0, 0);
+ &p, NULL, &ggate, NULL, 0, 0, 0, 0, 0);
else
rib_delete (AFI_IP, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL,
- 0, zebra_flags, &p, &ggate, 0, 0);
+ 0, zebra_flags, &p, NULL, &ggate, 0, 0);
}
if (dest.sa.sa_family == AF_INET6)
{
@@ -1046,18 +1034,18 @@ rtm_read (struct rt_msghdr *rtm)
*/
if (rtm->rtm_type == RTM_CHANGE)
rib_delete (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL,
- 0, zebra_flags, &p, NULL, 0, 0);
+ 0, zebra_flags, &p, NULL, NULL, 0, 0);
union g_addr ggate = { .ipv6 = gate.sin6.sin6_addr };
if (rtm->rtm_type == RTM_GET
|| rtm->rtm_type == RTM_ADD
|| rtm->rtm_type == RTM_CHANGE)
rib_add (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL,
- 0, zebra_flags, &p, &ggate, NULL, ifindex,
+ 0, zebra_flags, &p, NULL, &ggate, NULL, ifindex,
0, 0, 0, 0);
else
rib_delete (AFI_IP6, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL,
- 0, zebra_flags, &p, &ggate, ifindex, 0);
+ 0, zebra_flags, &p, NULL, &ggate, ifindex, 0);
}
}
@@ -1112,7 +1100,7 @@ rtm_write (int message,
msg.rtm.rtm_inits |= RTV_HOPCOUNT;
}
- ifp = if_lookup_by_index (index);
+ ifp = if_lookup_by_index (index, VRF_DEFAULT);
if (gate && (message == RTM_ADD || message == RTM_CHANGE))
msg.rtm.rtm_flags |= RTF_GATEWAY;