mirror of
https://git.proxmox.com/git/mirror_frr
synced 2026-02-01 18:56:52 +00:00
Last fixes from 6Wind patch.
This commit is contained in:
parent
71c0fb50fe
commit
726f9b2bbd
@ -718,6 +718,8 @@ cmd_ipv6_match (char *str)
|
||||
int state = STATE_START;
|
||||
int colons = 0, nums = 0, double_colon = 0;
|
||||
char *sp = NULL;
|
||||
struct sockaddr_in6 sin6_dummy;
|
||||
int ret;
|
||||
|
||||
if (str == NULL)
|
||||
return partly_match;
|
||||
@ -725,6 +727,15 @@ cmd_ipv6_match (char *str)
|
||||
if (strspn (str, IPV6_ADDR_STR) != strlen (str))
|
||||
return no_match;
|
||||
|
||||
/* use inet_pton that has a better support,
|
||||
* for example inet_pton can support the automatic addresses:
|
||||
* ::1.2.3.4
|
||||
*/
|
||||
ret = inet_pton(AF_INET6, str, &sin6_dummy.sin6_addr);
|
||||
|
||||
if (ret == 1)
|
||||
return exact_match;
|
||||
|
||||
while (*str != '\0')
|
||||
{
|
||||
switch (state)
|
||||
|
||||
@ -344,8 +344,13 @@ sockunion_connect (int fd, union sockunion *peersu, unsigned short port,
|
||||
{
|
||||
#ifdef HAVE_SIN6_SCOPE_ID
|
||||
/* su.sin6.sin6_scope_id = ifindex; */
|
||||
#ifdef MUSICA
|
||||
su.sin6.sin6_scope_id = ifindex;
|
||||
#endif
|
||||
#endif /* HAVE_SIN6_SCOPE_ID */
|
||||
#ifndef MUSICA
|
||||
SET_IN6_LINKLOCAL_IFINDEX (su.sin6.sin6_addr, ifindex);
|
||||
#endif
|
||||
}
|
||||
#endif /* KAME */
|
||||
break;
|
||||
|
||||
@ -143,6 +143,10 @@ typedef int socklen_t;
|
||||
#include <netinet/in_var.h>
|
||||
#endif /* HAVE_NETINET_IN_VAR_H */
|
||||
|
||||
#ifdef HAVE_NETINET6_IN6_VAR_H
|
||||
#include <netinet6/in6_var.h>
|
||||
#endif /* HAVE_NETINET6_IN6_VAR_H */
|
||||
|
||||
#ifdef HAVE_NETINET_IN6_VAR_H
|
||||
#include <netinet/in6_var.h>
|
||||
#endif /* HAVE_NETINET_IN6_VAR_H */
|
||||
|
||||
@ -263,8 +263,11 @@ connected_up_ipv6 (struct interface *ifp, struct connected *ifc)
|
||||
/* Apply mask to the network. */
|
||||
apply_mask_ipv6 (&p);
|
||||
|
||||
#if ! defined (MUSICA) && ! defined (LINUX)
|
||||
/* XXX: It is already done by rib_bogus_ipv6 within rib_add_ipv6 */
|
||||
if (IN6_IS_ADDR_UNSPECIFIED (&p.prefix))
|
||||
return;
|
||||
#endif
|
||||
|
||||
rib_add_ipv6 (ZEBRA_ROUTE_CONNECT, 0, &p, NULL, ifp->ifindex, 0);
|
||||
|
||||
|
||||
@ -31,7 +31,9 @@
|
||||
|
||||
/* Router advertisement feature. */
|
||||
#if (defined(LINUX_IPV6) && (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1)) || defined(KAME)
|
||||
#define RTADV
|
||||
#ifdef HAVE_RTADV
|
||||
#define RTADV
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef RTADV
|
||||
|
||||
@ -474,8 +474,10 @@ if_prefix_add_ipv6 (struct interface *ifp, struct connected *ifc)
|
||||
#endif
|
||||
memcpy (&addreq.ifra_prefixmask, &mask, sizeof (struct sockaddr_in6));
|
||||
|
||||
#ifdef HAVE_IFRA_LIFETIME
|
||||
addreq.ifra_lifetime.ia6t_pltime = ND6_INFINITE_LIFETIME;
|
||||
addreq.ifra_lifetime.ia6t_vltime = ND6_INFINITE_LIFETIME;
|
||||
#endif
|
||||
|
||||
ret = if_ioctl_ipv6 (SIOCAIFADDR_IN6, (caddr_t) &addreq);
|
||||
if (ret < 0)
|
||||
@ -513,8 +515,10 @@ if_prefix_delete_ipv6 (struct interface *ifp, struct connected *ifc)
|
||||
#endif
|
||||
memcpy (&addreq.ifra_prefixmask, &mask, sizeof (struct sockaddr_in6));
|
||||
|
||||
#ifdef HAVE_IFRA_LIFETIME
|
||||
addreq.ifra_lifetime.ia6t_pltime = ND6_INFINITE_LIFETIME;
|
||||
addreq.ifra_lifetime.ia6t_vltime = ND6_INFINITE_LIFETIME;
|
||||
#endif
|
||||
|
||||
ret = if_ioctl_ipv6 (SIOCDIFADDR_IN6, (caddr_t) &addreq);
|
||||
if (ret < 0)
|
||||
|
||||
@ -763,9 +763,8 @@ kernel_read (struct thread *thread)
|
||||
|
||||
thread_add_read (master, kernel_read, NULL, sock);
|
||||
|
||||
#ifdef DEBUG
|
||||
rtmsg_debug (&buf.r.rtm);
|
||||
#endif /* DEBUG */
|
||||
if (IS_ZEBRA_DEBUG_KERNEL)
|
||||
rtmsg_debug (&buf.r.rtm);
|
||||
|
||||
rtm = &buf.r.rtm;
|
||||
|
||||
@ -788,6 +787,8 @@ kernel_read (struct thread *thread)
|
||||
break;
|
||||
#endif /* RTM_IFANNOUNCE */
|
||||
default:
|
||||
if (IS_ZEBRA_DEBUG_KERNEL)
|
||||
zlog_info("Unprocessed RTM_type: %d", rtm->rtm_type);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
|
||||
@ -1539,8 +1539,14 @@ int
|
||||
rib_bogus_ipv6 (int type, struct prefix_ipv6 *p,
|
||||
struct in6_addr *gate, unsigned int ifindex, int table)
|
||||
{
|
||||
if (type == ZEBRA_ROUTE_CONNECT && IN6_IS_ADDR_UNSPECIFIED (&p->prefix))
|
||||
if (type == ZEBRA_ROUTE_CONNECT && IN6_IS_ADDR_UNSPECIFIED (&p->prefix)) {
|
||||
#if defined (MUSICA) || defined (LINUX)
|
||||
/* IN6_IS_ADDR_V4COMPAT(&p->prefix) */
|
||||
if (p->prefixlen == 96)
|
||||
return 0;
|
||||
#endif /* MUSICA */
|
||||
return 1;
|
||||
}
|
||||
if (type == ZEBRA_ROUTE_KERNEL && IN6_IS_ADDR_UNSPECIFIED (&p->prefix)
|
||||
&& p->prefixlen == 96 && gate && IN6_IS_ADDR_UNSPECIFIED (gate))
|
||||
{
|
||||
|
||||
@ -448,6 +448,7 @@ zsend_ipv4_add_multipath (struct zserv *client, struct prefix *p,
|
||||
{
|
||||
stream_putc (s, 1);
|
||||
|
||||
/* XXX: Waht's about NEXTHOP_TYPE_IPV4_IFNAME ? */
|
||||
if (nexthop->type == NEXTHOP_TYPE_IPV4
|
||||
|| nexthop->type == NEXTHOP_TYPE_IPV4_IFINDEX)
|
||||
stream_put_in_addr (s, &nexthop->gate.ipv4);
|
||||
@ -529,6 +530,8 @@ zsend_ipv4_delete_multipath (struct zserv *client, struct prefix *p,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#warning oldies
|
||||
int
|
||||
zsend_ipv4_add (struct zserv *client, int type, int flags,
|
||||
struct prefix_ipv4 *p, struct in_addr *nexthop,
|
||||
@ -610,8 +613,11 @@ zsend_ipv4_delete (struct zserv *client, int type, int flags,
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* oldies */
|
||||
|
||||
#ifdef HAVE_IPV6
|
||||
#if 0
|
||||
#warning oldies
|
||||
int
|
||||
zsend_ipv6_add (struct zserv *client, int type, int flags,
|
||||
struct prefix_ipv6 *p, struct in6_addr *nexthop,
|
||||
@ -652,6 +658,7 @@ zsend_ipv6_add (struct zserv *client, int type, int flags,
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* oldies */
|
||||
|
||||
int
|
||||
zsend_ipv6_add_multipath (struct zserv *client, struct prefix *p,
|
||||
@ -687,7 +694,9 @@ zsend_ipv6_add_multipath (struct zserv *client, struct prefix *p,
|
||||
{
|
||||
stream_putc (s, 1);
|
||||
|
||||
if (nexthop->type == NEXTHOP_TYPE_IPV6)
|
||||
if (nexthop->type == NEXTHOP_TYPE_IPV6
|
||||
|| nexthop->type == NEXTHOP_TYPE_IPV6_IFINDEX
|
||||
|| nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME)
|
||||
stream_write (s, (u_char *) &nexthop->gate.ipv6, 16);
|
||||
else
|
||||
stream_write (s, (u_char *) &empty, 16);
|
||||
@ -711,6 +720,8 @@ zsend_ipv6_add_multipath (struct zserv *client, struct prefix *p,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#warning oldies
|
||||
int
|
||||
zsend_ipv6_delete (struct zserv *client, int type, int flags,
|
||||
struct prefix_ipv6 *p, struct in6_addr *nexthop,
|
||||
@ -751,6 +762,7 @@ zsend_ipv6_delete (struct zserv *client, int type, int flags,
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* oldies */
|
||||
|
||||
int
|
||||
zsend_ipv6_delete_multipath (struct zserv *client, struct prefix *p,
|
||||
|
||||
@ -89,6 +89,8 @@ zsend_interface_up (struct zserv *, struct interface *);
|
||||
int
|
||||
zsend_interface_down (struct zserv *, struct interface *);
|
||||
|
||||
#if 0
|
||||
#warning oldies
|
||||
int
|
||||
zsend_ipv4_add (struct zserv *client, int type, int flags,
|
||||
struct prefix_ipv4 *p, struct in_addr *nexthop,
|
||||
@ -98,6 +100,7 @@ int
|
||||
zsend_ipv4_delete (struct zserv *client, int type, int flags,
|
||||
struct prefix_ipv4 *p, struct in_addr *nexthop,
|
||||
unsigned int ifindex);
|
||||
#endif
|
||||
|
||||
int
|
||||
zsend_ipv4_add_multipath (struct zserv *, struct prefix *, struct rib *);
|
||||
@ -106,6 +109,8 @@ int
|
||||
zsend_ipv4_delete_multipath (struct zserv *, struct prefix *, struct rib *);
|
||||
|
||||
#ifdef HAVE_IPV6
|
||||
#if 0
|
||||
#warning oldies
|
||||
int
|
||||
zsend_ipv6_add (struct zserv *client, int type, int flags,
|
||||
struct prefix_ipv6 *p, struct in6_addr *nexthop,
|
||||
@ -115,6 +120,7 @@ int
|
||||
zsend_ipv6_delete (struct zserv *client, int type, int flags,
|
||||
struct prefix_ipv6 *p, struct in6_addr *nexthop,
|
||||
unsigned int ifindex);
|
||||
#endif
|
||||
|
||||
int
|
||||
zsend_ipv6_add_multipath (struct zserv *, struct prefix *, struct rib *);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user