mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 03:28:31 +00:00
pim6d: reenable address management code
A few more pieces that should now work reasonably well for IPv6. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
cfef61553f
commit
97feb13f0f
@ -127,7 +127,6 @@ struct pim_interface *pim_if_new(struct interface *ifp, bool igmp, bool pim,
|
|||||||
pim_ifp->pim = ifp->vrf->info;
|
pim_ifp->pim = ifp->vrf->info;
|
||||||
pim_ifp->mroute_vif_index = -1;
|
pim_ifp->mroute_vif_index = -1;
|
||||||
|
|
||||||
#if PIM_IPV == 4
|
|
||||||
pim_ifp->igmp_version = IGMP_DEFAULT_VERSION;
|
pim_ifp->igmp_version = IGMP_DEFAULT_VERSION;
|
||||||
pim_ifp->gm_default_robustness_variable =
|
pim_ifp->gm_default_robustness_variable =
|
||||||
IGMP_DEFAULT_ROBUSTNESS_VARIABLE;
|
IGMP_DEFAULT_ROBUSTNESS_VARIABLE;
|
||||||
@ -153,10 +152,12 @@ struct pim_interface *pim_if_new(struct interface *ifp, bool igmp, bool pim,
|
|||||||
|
|
||||||
if (pim)
|
if (pim)
|
||||||
PIM_IF_DO_PIM(pim_ifp->options);
|
PIM_IF_DO_PIM(pim_ifp->options);
|
||||||
|
#if PIM_IPV == 4
|
||||||
if (igmp)
|
if (igmp)
|
||||||
PIM_IF_DO_IGMP(pim_ifp->options);
|
PIM_IF_DO_IGMP(pim_ifp->options);
|
||||||
|
|
||||||
PIM_IF_DO_IGMP_LISTEN_ALLROUTERS(pim_ifp->options);
|
PIM_IF_DO_IGMP_LISTEN_ALLROUTERS(pim_ifp->options);
|
||||||
|
#endif
|
||||||
|
|
||||||
pim_ifp->gm_join_list = NULL;
|
pim_ifp->gm_join_list = NULL;
|
||||||
pim_ifp->pim_neighbor_list = NULL;
|
pim_ifp->pim_neighbor_list = NULL;
|
||||||
@ -186,10 +187,11 @@ struct pim_interface *pim_if_new(struct interface *ifp, bool igmp, bool pim,
|
|||||||
|
|
||||||
ifp->info = pim_ifp;
|
ifp->info = pim_ifp;
|
||||||
|
|
||||||
|
#if PIM_IPV == 4
|
||||||
pim_sock_reset(ifp);
|
pim_sock_reset(ifp);
|
||||||
|
#endif
|
||||||
|
|
||||||
pim_if_add_vif(ifp, ispimreg, is_vxlan_term);
|
pim_if_add_vif(ifp, ispimreg, is_vxlan_term);
|
||||||
#endif
|
|
||||||
pim_ifp->pim->mcast_if_count++;
|
pim_ifp->pim->mcast_if_count++;
|
||||||
|
|
||||||
return pim_ifp;
|
return pim_ifp;
|
||||||
@ -208,9 +210,12 @@ void pim_if_delete(struct interface *ifp)
|
|||||||
if (pim_ifp->gm_join_list) {
|
if (pim_ifp->gm_join_list) {
|
||||||
pim_if_igmp_join_del_all(ifp);
|
pim_if_igmp_join_del_all(ifp);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
pim_ifchannel_delete_all(ifp);
|
pim_ifchannel_delete_all(ifp);
|
||||||
|
#if PIM_IPV == 4
|
||||||
igmp_sock_delete_all(ifp);
|
igmp_sock_delete_all(ifp);
|
||||||
|
#endif
|
||||||
|
|
||||||
pim_neighbor_delete_all(ifp, "Interface removed from configuration");
|
pim_neighbor_delete_all(ifp, "Interface removed from configuration");
|
||||||
|
|
||||||
@ -224,7 +229,6 @@ void pim_if_delete(struct interface *ifp)
|
|||||||
|
|
||||||
XFREE(MTYPE_PIM_INTERFACE, pim_ifp->boundary_oil_plist);
|
XFREE(MTYPE_PIM_INTERFACE, pim_ifp->boundary_oil_plist);
|
||||||
XFREE(MTYPE_PIM_INTERFACE, pim_ifp);
|
XFREE(MTYPE_PIM_INTERFACE, pim_ifp);
|
||||||
#endif
|
|
||||||
|
|
||||||
ifp->info = NULL;
|
ifp->info = NULL;
|
||||||
}
|
}
|
||||||
@ -1618,7 +1622,6 @@ static int pim_ifp_create(struct interface *ifp)
|
|||||||
*/
|
*/
|
||||||
if (pim_ifp)
|
if (pim_ifp)
|
||||||
pim_ifp->pim = pim;
|
pim_ifp->pim = pim;
|
||||||
#if PIM_IPV == 4
|
|
||||||
pim_if_addr_add_all(ifp);
|
pim_if_addr_add_all(ifp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1630,7 +1633,6 @@ static int pim_ifp_create(struct interface *ifp)
|
|||||||
* this is a no-op if it's already been done.
|
* this is a no-op if it's already been done.
|
||||||
*/
|
*/
|
||||||
pim_if_create_pimreg(pim);
|
pim_if_create_pimreg(pim);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if PIM_IPV == 4
|
#if PIM_IPV == 4
|
||||||
@ -1668,6 +1670,7 @@ static int pim_ifp_create(struct interface *ifp)
|
|||||||
|
|
||||||
static int pim_ifp_up(struct interface *ifp)
|
static int pim_ifp_up(struct interface *ifp)
|
||||||
{
|
{
|
||||||
|
uint32_t table_id;
|
||||||
struct pim_interface *pim_ifp;
|
struct pim_interface *pim_ifp;
|
||||||
struct pim_instance *pim;
|
struct pim_instance *pim;
|
||||||
|
|
||||||
@ -1690,9 +1693,6 @@ static int pim_ifp_up(struct interface *ifp)
|
|||||||
if (pim_ifp)
|
if (pim_ifp)
|
||||||
pim_ifp->pim = pim;
|
pim_ifp->pim = pim;
|
||||||
|
|
||||||
#if PIM_IPV == 4
|
|
||||||
uint32_t table_id;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
pim_if_addr_add_all() suffices for bringing up both IGMP and
|
pim_if_addr_add_all() suffices for bringing up both IGMP and
|
||||||
PIM
|
PIM
|
||||||
@ -1721,7 +1721,6 @@ static int pim_ifp_up(struct interface *ifp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1735,7 +1734,6 @@ static int pim_ifp_down(struct interface *ifp)
|
|||||||
ifp->mtu, if_is_operative(ifp));
|
ifp->mtu, if_is_operative(ifp));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if PIM_IPV == 4
|
|
||||||
if (!if_is_operative(ifp)) {
|
if (!if_is_operative(ifp)) {
|
||||||
pim_ifchannel_delete_all(ifp);
|
pim_ifchannel_delete_all(ifp);
|
||||||
/*
|
/*
|
||||||
@ -1744,6 +1742,7 @@ static int pim_ifp_down(struct interface *ifp)
|
|||||||
*/
|
*/
|
||||||
pim_if_addr_del_all(ifp);
|
pim_if_addr_del_all(ifp);
|
||||||
|
|
||||||
|
#if PIM_IPV == 4
|
||||||
/*
|
/*
|
||||||
pim_sock_delete() closes the socket, stops read and timer
|
pim_sock_delete() closes the socket, stops read and timer
|
||||||
threads,
|
threads,
|
||||||
@ -1752,13 +1751,15 @@ static int pim_ifp_down(struct interface *ifp)
|
|||||||
if (ifp->info) {
|
if (ifp->info) {
|
||||||
pim_sock_delete(ifp, "link down");
|
pim_sock_delete(ifp, "link down");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ifp->info) {
|
if (ifp->info) {
|
||||||
pim_if_del_vif(ifp);
|
pim_if_del_vif(ifp);
|
||||||
|
#if PIM_IPV == 4
|
||||||
pim_ifstat_reset(ifp);
|
pim_ifstat_reset(ifp);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1773,12 +1774,12 @@ static int pim_ifp_destroy(struct interface *ifp)
|
|||||||
ifp->mtu, if_is_operative(ifp));
|
ifp->mtu, if_is_operative(ifp));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if PIM_IPV == 4
|
|
||||||
struct pim_instance *pim;
|
|
||||||
|
|
||||||
if (!if_is_operative(ifp))
|
if (!if_is_operative(ifp))
|
||||||
pim_if_addr_del_all(ifp);
|
pim_if_addr_del_all(ifp);
|
||||||
|
|
||||||
|
#if PIM_IPV == 4
|
||||||
|
struct pim_instance *pim;
|
||||||
|
|
||||||
pim = ifp->vrf->info;
|
pim = ifp->vrf->info;
|
||||||
if (pim && pim->vxlan.term_if == ifp)
|
if (pim && pim->vxlan.term_if == ifp)
|
||||||
pim_vxlan_del_term_dev(pim);
|
pim_vxlan_del_term_dev(pim);
|
||||||
|
@ -128,6 +128,15 @@ void pim_igmp_other_querier_timer_off(struct gm_sock *igmp);
|
|||||||
int igmp_validate_checksum(char *igmp_msg, int igmp_msg_len);
|
int igmp_validate_checksum(char *igmp_msg, int igmp_msg_len);
|
||||||
|
|
||||||
#else /* PIM_IPV != 4 */
|
#else /* PIM_IPV != 4 */
|
||||||
|
static inline void pim_igmp_if_init(struct pim_interface *pim_ifp,
|
||||||
|
struct interface *ifp)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void pim_igmp_if_fini(struct pim_interface *pim_ifp)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static inline void pim_igmp_general_query_on(struct gm_sock *igmp)
|
static inline void pim_igmp_general_query_on(struct gm_sock *igmp)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,6 @@ struct zclient *zclient;
|
|||||||
|
|
||||||
|
|
||||||
/* Router-id update message from zebra. */
|
/* Router-id update message from zebra. */
|
||||||
__attribute__((unused))
|
|
||||||
static int pim_router_id_update_zebra(ZAPI_CALLBACK_ARGS)
|
static int pim_router_id_update_zebra(ZAPI_CALLBACK_ARGS)
|
||||||
{
|
{
|
||||||
struct prefix router_id;
|
struct prefix router_id;
|
||||||
@ -65,7 +64,6 @@ static int pim_router_id_update_zebra(ZAPI_CALLBACK_ARGS)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((unused))
|
|
||||||
static int pim_zebra_interface_vrf_update(ZAPI_CALLBACK_ARGS)
|
static int pim_zebra_interface_vrf_update(ZAPI_CALLBACK_ARGS)
|
||||||
{
|
{
|
||||||
struct interface *ifp;
|
struct interface *ifp;
|
||||||
@ -158,6 +156,10 @@ static int pim_zebra_if_address_add(ZAPI_CALLBACK_ARGS)
|
|||||||
SET_FLAG(c->flags, ZEBRA_IFA_SECONDARY);
|
SET_FLAG(c->flags, ZEBRA_IFA_SECONDARY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else /* PIM_IPV != 4 */
|
||||||
|
if (p->family != PIM_AF)
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
pim_if_addr_add(c);
|
pim_if_addr_add(c);
|
||||||
if (pim_ifp) {
|
if (pim_ifp) {
|
||||||
@ -178,12 +180,6 @@ static int pim_zebra_if_address_add(ZAPI_CALLBACK_ARGS)
|
|||||||
pim_if_addr_add_all(ifp);
|
pim_if_addr_add_all(ifp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* PIM_IPV != 4 */
|
|
||||||
(void)pim_ifp;
|
|
||||||
|
|
||||||
if (p->family == PIM_AF)
|
|
||||||
pim_if_addr_add(c);
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,8 +218,7 @@ static int pim_zebra_if_address_del(ZAPI_CALLBACK_ARGS)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if PIM_IPV == 4
|
if (p->family == PIM_AF) {
|
||||||
if (p->family == AF_INET) {
|
|
||||||
struct pim_instance *pim;
|
struct pim_instance *pim;
|
||||||
|
|
||||||
pim = vrf->info;
|
pim = vrf->info;
|
||||||
@ -231,10 +226,6 @@ static int pim_zebra_if_address_del(ZAPI_CALLBACK_ARGS)
|
|||||||
pim_rp_setup(pim);
|
pim_rp_setup(pim);
|
||||||
pim_i_am_rp_re_evaluate(pim);
|
pim_i_am_rp_re_evaluate(pim);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if (p->family == PIM_AF)
|
|
||||||
pim_if_addr_del(c, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
connected_free(&c);
|
connected_free(&c);
|
||||||
return 0;
|
return 0;
|
||||||
@ -461,10 +452,10 @@ static zclient_handler *const pim_handlers[] = {
|
|||||||
[ZEBRA_INTERFACE_ADDRESS_DELETE] = pim_zebra_if_address_del,
|
[ZEBRA_INTERFACE_ADDRESS_DELETE] = pim_zebra_if_address_del,
|
||||||
|
|
||||||
[ZEBRA_NEXTHOP_UPDATE] = pim_parse_nexthop_update,
|
[ZEBRA_NEXTHOP_UPDATE] = pim_parse_nexthop_update,
|
||||||
#if PIM_IPV == 4
|
|
||||||
[ZEBRA_ROUTER_ID_UPDATE] = pim_router_id_update_zebra,
|
[ZEBRA_ROUTER_ID_UPDATE] = pim_router_id_update_zebra,
|
||||||
[ZEBRA_INTERFACE_VRF_UPDATE] = pim_zebra_interface_vrf_update,
|
[ZEBRA_INTERFACE_VRF_UPDATE] = pim_zebra_interface_vrf_update,
|
||||||
|
|
||||||
|
#if PIM_IPV == 4
|
||||||
[ZEBRA_VXLAN_SG_ADD] = pim_zebra_vxlan_sg_proc,
|
[ZEBRA_VXLAN_SG_ADD] = pim_zebra_vxlan_sg_proc,
|
||||||
[ZEBRA_VXLAN_SG_DEL] = pim_zebra_vxlan_sg_proc,
|
[ZEBRA_VXLAN_SG_DEL] = pim_zebra_vxlan_sg_proc,
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user