mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 11:25:41 +00:00
Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster
This commit is contained in:
commit
69593b97df
@ -234,9 +234,6 @@ bgp_exit (int status)
|
|||||||
if (retain_mode)
|
if (retain_mode)
|
||||||
if_add_hook (IF_DELETE_HOOK, NULL);
|
if_add_hook (IF_DELETE_HOOK, NULL);
|
||||||
|
|
||||||
/* free interface and connected route information. */
|
|
||||||
bgp_if_finish ();
|
|
||||||
|
|
||||||
/* reverse bgp_master_init */
|
/* reverse bgp_master_init */
|
||||||
for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
|
for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
|
||||||
bgp_delete (bgp);
|
bgp_delete (bgp);
|
||||||
|
38
bgpd/bgpd.c
38
bgpd/bgpd.c
@ -3058,6 +3058,9 @@ bgp_delete (struct bgp *bgp)
|
|||||||
if (IS_BGP_INST_KNOWN_TO_ZEBRA(bgp))
|
if (IS_BGP_INST_KNOWN_TO_ZEBRA(bgp))
|
||||||
bgp_zebra_instance_deregister (bgp);
|
bgp_zebra_instance_deregister (bgp);
|
||||||
|
|
||||||
|
/* Free interfaces in this instance. */
|
||||||
|
bgp_if_finish (bgp);
|
||||||
|
|
||||||
/* If Default instance or VRF, unlink from the VRF structure. */
|
/* If Default instance or VRF, unlink from the VRF structure. */
|
||||||
vrf = bgp_vrf_lookup_by_instance_type (bgp);
|
vrf = bgp_vrf_lookup_by_instance_type (bgp);
|
||||||
if (vrf)
|
if (vrf)
|
||||||
@ -7158,34 +7161,27 @@ bgp_master_init (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Free up connected routes and interfaces; invoked upon bgp_exit()
|
* Free up connected routes and interfaces for a BGP instance. Invoked upon
|
||||||
|
* instance delete (non-default only) or BGP exit.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
bgp_if_finish (void)
|
bgp_if_finish (struct bgp *bgp)
|
||||||
{
|
{
|
||||||
struct bgp *bgp;
|
struct listnode *ifnode, *ifnnode;
|
||||||
struct listnode *node, *nnode;
|
struct interface *ifp;
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
|
|
||||||
{
|
|
||||||
struct listnode *ifnode, *ifnnode;
|
|
||||||
struct interface *ifp;
|
|
||||||
|
|
||||||
if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW)
|
if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW)
|
||||||
continue;
|
return;
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS (vrf_iflist(bgp->vrf_id), ifnode, ifnnode, ifp))
|
for (ALL_LIST_ELEMENTS (vrf_iflist(bgp->vrf_id), ifnode, ifnnode, ifp))
|
||||||
{
|
{
|
||||||
struct listnode *c_node, *c_nnode;
|
struct listnode *c_node, *c_nnode;
|
||||||
struct connected *c;
|
struct connected *c;
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS (ifp->connected, c_node, c_nnode, c))
|
for (ALL_LIST_ELEMENTS (ifp->connected, c_node, c_nnode, c))
|
||||||
bgp_connected_delete (bgp, c);
|
bgp_connected_delete (bgp, c);
|
||||||
|
|
||||||
if_delete (ifp);
|
|
||||||
}
|
|
||||||
list_free (vrf_iflist(bgp->vrf_id));
|
|
||||||
}
|
}
|
||||||
|
vrf_iflist_terminate (bgp->vrf_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1174,7 +1174,7 @@ extern char *peer_uptime (time_t, char *, size_t, u_char, json_object *);
|
|||||||
extern int bgp_config_write (struct vty *);
|
extern int bgp_config_write (struct vty *);
|
||||||
extern void bgp_config_write_family_header (struct vty *, afi_t, safi_t, int *);
|
extern void bgp_config_write_family_header (struct vty *, afi_t, safi_t, int *);
|
||||||
|
|
||||||
extern void bgp_if_finish (void);
|
extern void bgp_if_finish (struct bgp *);
|
||||||
extern void bgp_master_init (void);
|
extern void bgp_master_init (void);
|
||||||
|
|
||||||
extern void bgp_init (void);
|
extern void bgp_init (void);
|
||||||
|
1
debian/bgpd.service
vendored
1
debian/bgpd.service
vendored
@ -17,5 +17,6 @@ Restart=on-abnormal
|
|||||||
LimitNOFILE=1024
|
LimitNOFILE=1024
|
||||||
ExecStart=/usr/lib/quagga/bgpd $BGPD_OPTIONS
|
ExecStart=/usr/lib/quagga/bgpd $BGPD_OPTIONS
|
||||||
ExecStartPost=/usr/bin/vtysh -b -n
|
ExecStartPost=/usr/bin/vtysh -b -n
|
||||||
|
ExecStopPost=/usr/bin/touch /var/run/quagga/bgpd.was_running
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=network-online.target
|
WantedBy=network-online.target
|
||||||
|
1
debian/isisd.service
vendored
1
debian/isisd.service
vendored
@ -17,5 +17,6 @@ Restart=on-abnormal
|
|||||||
LimitNOFILE=1024
|
LimitNOFILE=1024
|
||||||
ExecStart=/usr/lib/quagga/isisd $ISISD_OPTIONS
|
ExecStart=/usr/lib/quagga/isisd $ISISD_OPTIONS
|
||||||
ExecStartPost=/usr/bin/vtysh -b -n
|
ExecStartPost=/usr/bin/vtysh -b -n
|
||||||
|
ExecStopPost=/bin/touch /var/run/quagga/isisd.was_running
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=network-online.target
|
WantedBy=network-online.target
|
||||||
|
1
debian/ospf6d.service
vendored
1
debian/ospf6d.service
vendored
@ -16,5 +16,6 @@ RestartSec=5
|
|||||||
Restart=on-abnormal
|
Restart=on-abnormal
|
||||||
ExecStart=/usr/lib/quagga/ospf6d $OSPF6D_OPTIONS
|
ExecStart=/usr/lib/quagga/ospf6d $OSPF6D_OPTIONS
|
||||||
ExecStartPost=/usr/bin/vtysh -b -n
|
ExecStartPost=/usr/bin/vtysh -b -n
|
||||||
|
ExecStopPost=/usr/bin/touch /var/run/quagga/ospf6d.was_running
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=network-online.target
|
WantedBy=network-online.target
|
||||||
|
1
debian/ospfd.service
vendored
1
debian/ospfd.service
vendored
@ -17,5 +17,6 @@ Restart=on-abnormal
|
|||||||
LimitNOFILE=1024
|
LimitNOFILE=1024
|
||||||
ExecStart=/usr/lib/quagga/ospfd $OSPFD_OPTIONS
|
ExecStart=/usr/lib/quagga/ospfd $OSPFD_OPTIONS
|
||||||
ExecStartPost=/usr/bin/vtysh -b -n
|
ExecStartPost=/usr/bin/vtysh -b -n
|
||||||
|
ExecStopPost=/usr/bin/touch /var/run/quagga/ospfd.was_running
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=network-online.target
|
WantedBy=network-online.target
|
||||||
|
1
debian/ospfd@.service
vendored
1
debian/ospfd@.service
vendored
@ -17,5 +17,6 @@ Restart=on-abnormal
|
|||||||
LimitNOFILE=1024
|
LimitNOFILE=1024
|
||||||
ExecStart=/usr/lib/quagga/ospfd $OSPFD_OPTIONS -n %I
|
ExecStart=/usr/lib/quagga/ospfd $OSPFD_OPTIONS -n %I
|
||||||
ExecStartPost=/usr/bin/vtysh -b -n
|
ExecStartPost=/usr/bin/vtysh -b -n
|
||||||
|
ExecStopPost=/bin/touch /var/run/quagga/ospfd.%I.was_running
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=network-online.target
|
WantedBy=network-online.target
|
||||||
|
1
debian/quagga.install
vendored
1
debian/quagga.install
vendored
@ -3,6 +3,7 @@ usr/bin/vtysh
|
|||||||
usr/include/quagga/
|
usr/include/quagga/
|
||||||
usr/lib/
|
usr/lib/
|
||||||
tools/quagga-reload.py usr/lib/quagga/
|
tools/quagga-reload.py usr/lib/quagga/
|
||||||
|
tools/startup usr/lib/quagga/
|
||||||
usr/share/doc/quagga/
|
usr/share/doc/quagga/
|
||||||
usr/share/man/man1/vtysh.1
|
usr/share/man/man1/vtysh.1
|
||||||
usr/share/man/man8
|
usr/share/man/man8
|
||||||
|
14
debian/quagga.service
vendored
14
debian/quagga.service
vendored
@ -8,13 +8,13 @@ Type=simple
|
|||||||
RemainAfterExit=yes
|
RemainAfterExit=yes
|
||||||
TimeoutSec=2m30s
|
TimeoutSec=2m30s
|
||||||
TimeoutStopSec=1m
|
TimeoutStopSec=1m
|
||||||
ExecStartPre=-/bin/systemctl start zebra.service
|
ExecStartPre=-/usr/lib/quagga/startup zebra
|
||||||
ExecStartPre=-/bin/systemctl start bgpd.service
|
ExecStartPre=-/usr/lib/quagga/startup bgpd
|
||||||
ExecStartPre=-/bin/systemctl start isisd.service
|
ExecStartPre=-/usr/lib/quagga/startup isisd
|
||||||
ExecStartPre=-/bin/systemctl start ospfd.service
|
ExecStartPre=-/usr/lib/quagga/startup ospfd
|
||||||
ExecStartPre=-/bin/systemctl start ospf6d.service
|
ExecStartPre=-/usr/lib/quagga/startup ospf6d
|
||||||
ExecStartPre=-/bin/systemctl start ripd.service
|
ExecStartPre=-/usr/lib/quagga/startup ripd
|
||||||
ExecStartPre=-/bin/systemctl start ripngd.service
|
ExecStartPre=-/usr/lib/quagga/startup ripngd
|
||||||
ExecStartPost=-/usr/bin/vtysh -b -n
|
ExecStartPost=-/usr/bin/vtysh -b -n
|
||||||
#
|
#
|
||||||
ExecReload=/usr/lib/quagga/quagga-reload.py --reload /etc/quagga/Quagga.conf
|
ExecReload=/usr/lib/quagga/quagga-reload.py --reload /etc/quagga/Quagga.conf
|
||||||
|
1
debian/ripd.service
vendored
1
debian/ripd.service
vendored
@ -17,5 +17,6 @@ Restart=on-abnormal
|
|||||||
LimitNOFILE=1024
|
LimitNOFILE=1024
|
||||||
ExecStart=/usr/lib/quagga/ripd $RIPD_OPTIONS
|
ExecStart=/usr/lib/quagga/ripd $RIPD_OPTIONS
|
||||||
ExecStartPost=/usr/bin/vtysh -b -n
|
ExecStartPost=/usr/bin/vtysh -b -n
|
||||||
|
ExecStopPost=/usr/bin/touch /var/run/quagga/ripd.was_running
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=network-online.target
|
WantedBy=network-online.target
|
||||||
|
1
debian/ripngd.service
vendored
1
debian/ripngd.service
vendored
@ -17,5 +17,6 @@ Restart=on-abnormal
|
|||||||
LimitNOFILE=1024
|
LimitNOFILE=1024
|
||||||
ExecStart=/usr/lib/quagga/ripngd $RIPNGD_OPTIONS
|
ExecStart=/usr/lib/quagga/ripngd $RIPNGD_OPTIONS
|
||||||
ExecStartPost=/usr/bin/vtysh -b -n
|
ExecStartPost=/usr/bin/vtysh -b -n
|
||||||
|
ExecStopPost=/bin/touch /var/run/quagga/ripngd.was_running
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=network-online.target
|
WantedBy=network-online.target
|
||||||
|
1
debian/zebra.service
vendored
1
debian/zebra.service
vendored
@ -16,5 +16,6 @@ Restart=on-abnormal
|
|||||||
LimitNOFILE=1024
|
LimitNOFILE=1024
|
||||||
ExecStart=/usr/lib/quagga/zebra $ZEBRA_OPTIONS
|
ExecStart=/usr/lib/quagga/zebra $ZEBRA_OPTIONS
|
||||||
ExecStartPost=/usr/bin/vtysh -b -n
|
ExecStartPost=/usr/bin/vtysh -b -n
|
||||||
|
ExecStopPost=/usr/bin/touch /var/run/quagga/zebra.was_running
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=network-online.target
|
WantedBy=network-online.target
|
||||||
|
@ -495,6 +495,15 @@ vrf_iflist_get (vrf_id_t vrf_id)
|
|||||||
return vrf->iflist;
|
return vrf->iflist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Free the interface list of the specified VRF. */
|
||||||
|
void
|
||||||
|
vrf_iflist_terminate (vrf_id_t vrf_id)
|
||||||
|
{
|
||||||
|
struct vrf * vrf = vrf_lookup (vrf_id);
|
||||||
|
if (vrf && vrf->iflist)
|
||||||
|
if_terminate (vrf->vrf_id, &vrf->iflist);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* VRF bit-map
|
* VRF bit-map
|
||||||
*/
|
*/
|
||||||
|
@ -180,6 +180,8 @@ extern void *vrf_info_lookup (vrf_id_t);
|
|||||||
extern struct list *vrf_iflist (vrf_id_t);
|
extern struct list *vrf_iflist (vrf_id_t);
|
||||||
/* Get the interface list of the specified VRF. Create one if not find. */
|
/* Get the interface list of the specified VRF. Create one if not find. */
|
||||||
extern struct list *vrf_iflist_get (vrf_id_t);
|
extern struct list *vrf_iflist_get (vrf_id_t);
|
||||||
|
/* Free the interface list of the specified VRF. */
|
||||||
|
extern void vrf_iflist_terminate (vrf_id_t vrf_id);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* VRF bit-map: maintaining flags, one bit per VRF ID
|
* VRF bit-map: maintaining flags, one bit per VRF ID
|
||||||
|
20
tools/startup
Executable file
20
tools/startup
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Script to see if we should startup the particular
|
||||||
|
# daemon as part of systemd initialization
|
||||||
|
# If the daemon was running (set by the ExecStopPost
|
||||||
|
# action in the Unit file ) or if the daemon
|
||||||
|
# is enabled start it up
|
||||||
|
FILE="/var/run/quagga/$1.was_running"
|
||||||
|
if [ -e $FILE ]
|
||||||
|
then
|
||||||
|
rm $FILE
|
||||||
|
systemctl start $1
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemctl is-enabled $1 > /dev/null
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
systemctl start $1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
@ -183,6 +183,14 @@ if_lookup_by_index_per_ns (struct zebra_ns *ns, u_int32_t ifindex)
|
|||||||
return ifp;
|
return ifp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
ifindex2ifname_per_ns (struct zebra_ns *zns, unsigned int ifindex)
|
||||||
|
{
|
||||||
|
struct interface *ifp;
|
||||||
|
|
||||||
|
return ((ifp = if_lookup_by_index_per_ns (zns, ifindex)) != NULL) ?
|
||||||
|
ifp->name : "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
/* Tie an interface address to its derived subnet list of addresses. */
|
/* Tie an interface address to its derived subnet list of addresses. */
|
||||||
int
|
int
|
||||||
|
@ -210,6 +210,8 @@ struct zebra_if
|
|||||||
|
|
||||||
extern struct interface *if_lookup_by_index_per_ns (struct zebra_ns *, u_int32_t);
|
extern struct interface *if_lookup_by_index_per_ns (struct zebra_ns *, u_int32_t);
|
||||||
extern struct interface *if_link_per_ns (struct zebra_ns *, struct interface *);
|
extern struct interface *if_link_per_ns (struct zebra_ns *, struct interface *);
|
||||||
|
extern const char *ifindex2ifname_per_ns (struct zebra_ns *, unsigned int);
|
||||||
|
|
||||||
extern void if_unlink_per_ns (struct interface *);
|
extern void if_unlink_per_ns (struct interface *);
|
||||||
extern void if_nbr_ipv6ll_to_ipv4ll_neigh_update (struct interface *ifp,
|
extern void if_nbr_ipv6ll_to_ipv4ll_neigh_update (struct interface *ifp,
|
||||||
struct in6_addr *address, int add);
|
struct in6_addr *address, int add);
|
||||||
|
@ -323,6 +323,10 @@ struct zebra_vrf
|
|||||||
/* FIB identifier. */
|
/* FIB identifier. */
|
||||||
u_char fib_id;
|
u_char fib_id;
|
||||||
|
|
||||||
|
/* Flags. */
|
||||||
|
u_int16_t flags;
|
||||||
|
#define ZEBRA_VRF_RIB_SCHEDULED (1 << 0)
|
||||||
|
|
||||||
u_int32_t table_id;
|
u_int32_t table_id;
|
||||||
|
|
||||||
/* Routing table. */
|
/* Routing table. */
|
||||||
|
@ -545,7 +545,7 @@ netlink_vrf_change (struct nlmsghdr *h, struct rtattr *tb, const char *name)
|
|||||||
* TODO: Status changes will be handled against the VRF "interface".
|
* TODO: Status changes will be handled against the VRF "interface".
|
||||||
*/
|
*/
|
||||||
vrf = vrf_lookup ((vrf_id_t)ifi->ifi_index);
|
vrf = vrf_lookup ((vrf_id_t)ifi->ifi_index);
|
||||||
if (vrf)
|
if (vrf && vrf->info)
|
||||||
{
|
{
|
||||||
if (IS_ZEBRA_DEBUG_KERNEL)
|
if (IS_ZEBRA_DEBUG_KERNEL)
|
||||||
zlog_debug ("%s: RTM_NEWLINK status for VRF(%s) index %u - ignored",
|
zlog_debug ("%s: RTM_NEWLINK status for VRF(%s) index %u - ignored",
|
||||||
@ -649,7 +649,7 @@ netlink_interface (struct sockaddr_nl *snl, struct nlmsghdr *h,
|
|||||||
if (kind && strcmp(kind, "vrf") == 0)
|
if (kind && strcmp(kind, "vrf") == 0)
|
||||||
{
|
{
|
||||||
netlink_vrf_change(h, tb[IFLA_LINKINFO], name);
|
netlink_vrf_change(h, tb[IFLA_LINKINFO], name);
|
||||||
return 0;
|
vrf_id = (vrf_id_t)ifi->ifi_index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1277,7 +1277,7 @@ netlink_link_change (struct sockaddr_nl *snl, struct nlmsghdr *h,
|
|||||||
if (kind && strcmp(kind, "vrf") == 0)
|
if (kind && strcmp(kind, "vrf") == 0)
|
||||||
{
|
{
|
||||||
netlink_vrf_change(h, tb[IFLA_LINKINFO], name);
|
netlink_vrf_change(h, tb[IFLA_LINKINFO], name);
|
||||||
return 0;
|
vrf_id = (vrf_id_t)ifi->ifi_index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1656,10 +1656,25 @@ process_subq (struct list * subq, u_char qindex)
|
|||||||
static void
|
static void
|
||||||
meta_queue_process_complete (struct work_queue *dummy)
|
meta_queue_process_complete (struct work_queue *dummy)
|
||||||
{
|
{
|
||||||
zebra_evaluate_rnh(0, AF_INET, 0, RNH_NEXTHOP_TYPE, NULL);
|
vrf_iter_t iter;
|
||||||
zebra_evaluate_rnh(0, AF_INET, 0, RNH_IMPORT_CHECK_TYPE, NULL);
|
struct zebra_vrf *zvrf;
|
||||||
zebra_evaluate_rnh(0, AF_INET6, 0, RNH_NEXTHOP_TYPE, NULL);
|
|
||||||
zebra_evaluate_rnh(0, AF_INET6, 0, RNH_IMPORT_CHECK_TYPE, NULL);
|
/* Evaluate nexthops for those VRFs which underwent route processing. This
|
||||||
|
* should limit the evaluation to the necessary VRFs in most common
|
||||||
|
* situations.
|
||||||
|
*/
|
||||||
|
for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
|
||||||
|
{
|
||||||
|
if (((zvrf = vrf_iter2info (iter)) != NULL) &&
|
||||||
|
(zvrf->flags & ZEBRA_VRF_RIB_SCHEDULED))
|
||||||
|
{
|
||||||
|
zvrf->flags &= ~ZEBRA_VRF_RIB_SCHEDULED;
|
||||||
|
zebra_evaluate_rnh(zvrf->vrf_id, AF_INET, 0, RNH_NEXTHOP_TYPE, NULL);
|
||||||
|
zebra_evaluate_rnh(zvrf->vrf_id, AF_INET, 0, RNH_IMPORT_CHECK_TYPE, NULL);
|
||||||
|
zebra_evaluate_rnh(zvrf->vrf_id, AF_INET6, 0, RNH_NEXTHOP_TYPE, NULL);
|
||||||
|
zebra_evaluate_rnh(zvrf->vrf_id, AF_INET6, 0, RNH_IMPORT_CHECK_TYPE, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dispatch the meta queue by picking, processing and unlocking the next RN from
|
/* Dispatch the meta queue by picking, processing and unlocking the next RN from
|
||||||
@ -1714,6 +1729,7 @@ rib_meta_queue_add (struct meta_queue *mq, struct route_node *rn)
|
|||||||
RNODE_FOREACH_RIB (rn, rib)
|
RNODE_FOREACH_RIB (rn, rib)
|
||||||
{
|
{
|
||||||
u_char qindex = meta_queue_map[rib->type];
|
u_char qindex = meta_queue_map[rib->type];
|
||||||
|
struct zebra_vrf *zvrf;
|
||||||
|
|
||||||
/* Invariant: at this point we always have rn->info set. */
|
/* Invariant: at this point we always have rn->info set. */
|
||||||
if (CHECK_FLAG (rib_dest_from_rnode (rn)->flags,
|
if (CHECK_FLAG (rib_dest_from_rnode (rn)->flags,
|
||||||
@ -1728,6 +1744,10 @@ rib_meta_queue_add (struct meta_queue *mq, struct route_node *rn)
|
|||||||
if (IS_ZEBRA_DEBUG_RIB_DETAILED)
|
if (IS_ZEBRA_DEBUG_RIB_DETAILED)
|
||||||
zlog_debug ("%u:%s/%d: rn %p queued into sub-queue %u",
|
zlog_debug ("%u:%s/%d: rn %p queued into sub-queue %u",
|
||||||
rib->vrf_id, buf, rn->p.prefixlen, rn, qindex);
|
rib->vrf_id, buf, rn->p.prefixlen, rn, qindex);
|
||||||
|
|
||||||
|
zvrf = zebra_vrf_lookup (rib->vrf_id);
|
||||||
|
if (zvrf)
|
||||||
|
zvrf->flags |= ZEBRA_VRF_RIB_SCHEDULED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include "zebra/redistribute.h"
|
#include "zebra/redistribute.h"
|
||||||
#include "zebra/debug.h"
|
#include "zebra/debug.h"
|
||||||
#include "zebra/zebra_rnh.h"
|
#include "zebra/zebra_rnh.h"
|
||||||
|
#include "zebra/interface.h"
|
||||||
|
|
||||||
/* Default rtm_table for all clients */
|
/* Default rtm_table for all clients */
|
||||||
extern struct zebra_t zebrad;
|
extern struct zebra_t zebrad;
|
||||||
@ -946,18 +947,18 @@ print_nh (struct nexthop *nexthop, struct vty *vty)
|
|||||||
case NEXTHOP_TYPE_IPV4_IFINDEX:
|
case NEXTHOP_TYPE_IPV4_IFINDEX:
|
||||||
vty_out (vty, " via %s", inet_ntoa (nexthop->gate.ipv4));
|
vty_out (vty, " via %s", inet_ntoa (nexthop->gate.ipv4));
|
||||||
if (nexthop->ifindex)
|
if (nexthop->ifindex)
|
||||||
vty_out (vty, ", %s", ifindex2ifname (nexthop->ifindex));
|
vty_out (vty, ", %s", ifindex2ifname_per_ns (dzns, nexthop->ifindex));
|
||||||
break;
|
break;
|
||||||
case NEXTHOP_TYPE_IPV6:
|
case NEXTHOP_TYPE_IPV6:
|
||||||
case NEXTHOP_TYPE_IPV6_IFINDEX:
|
case NEXTHOP_TYPE_IPV6_IFINDEX:
|
||||||
vty_out (vty, " %s",
|
vty_out (vty, " %s",
|
||||||
inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, BUFSIZ));
|
inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, BUFSIZ));
|
||||||
if (nexthop->ifindex)
|
if (nexthop->ifindex)
|
||||||
vty_out (vty, ", via %s", ifindex2ifname (nexthop->ifindex));
|
vty_out (vty, ", via %s", ifindex2ifname_per_ns (dzns, nexthop->ifindex));
|
||||||
break;
|
break;
|
||||||
case NEXTHOP_TYPE_IFINDEX:
|
case NEXTHOP_TYPE_IFINDEX:
|
||||||
vty_out (vty, " is directly connected, %s",
|
vty_out (vty, " is directly connected, %s",
|
||||||
ifindex2ifname (nexthop->ifindex));
|
ifindex2ifname_per_ns (dzns, nexthop->ifindex));
|
||||||
break;
|
break;
|
||||||
case NEXTHOP_TYPE_BLACKHOLE:
|
case NEXTHOP_TYPE_BLACKHOLE:
|
||||||
vty_out (vty, " is directly connected, Null0");
|
vty_out (vty, " is directly connected, Null0");
|
||||||
|
Loading…
Reference in New Issue
Block a user