diff options
author | David Lamparter <equinox@diac24.net> | 2010-02-03 16:29:37 +0100 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2010-02-04 03:12:39 +0100 |
commit | 168595ff42c4046167b0fbae2770c037c854abd0 (patch) | |
tree | 1d080009b23fb65eb822bbdf2dd80e4a307844aa | |
parent | bc3f098ff9f358dd459058a4cc3d7fc0d09a45f4 (diff) | |
download | quagga-168595ff42c4046167b0fbae2770c037c854abd0.tar.bz2 quagga-168595ff42c4046167b0fbae2770c037c854abd0.tar.xz |
dn42: pimd: vifctln support
-rw-r--r-- | pimd/pim_mroute.c | 15 | ||||
-rw-r--r-- | pimd/pim_mroute.h | 5 |
2 files changed, 14 insertions, 6 deletions
diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index c76ba525..f9c291dd 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -327,7 +327,7 @@ int pim_mroute_socket_disable() */ int pim_mroute_add_vif(int vif_index, struct in_addr ifaddr) { - struct vifctl vc; + struct vifctl_ext vc; int err; if (PIM_MROUTE_IS_DISABLED) { @@ -337,11 +337,12 @@ int pim_mroute_add_vif(int vif_index, struct in_addr ifaddr) } memset(&vc, 0, sizeof(vc)); - vc.vifc_vifi = vif_index; - vc.vifc_flags = 0; - vc.vifc_threshold = PIM_MROUTE_MIN_TTL; - vc.vifc_rate_limit = 0; - memcpy(&vc.vifc_lcl_addr, &ifaddr, sizeof(vc.vifc_lcl_addr)); + vc.vc.vifc_vifi = vif_index; + vc.vc.vifc_flags = 0; + vc.vc.vifc_threshold = PIM_MROUTE_MIN_TTL; + vc.vc.vifc_rate_limit = 0; + vc.ifindex = vif_index; + memcpy(&vc.vc.vifc_lcl_addr, &ifaddr, sizeof(vc.vc.vifc_lcl_addr)); #ifdef PIM_DVMRP_TUNNEL if (vc.vifc_flags & VIFF_TUNNEL) { @@ -350,6 +351,8 @@ int pim_mroute_add_vif(int vif_index, struct in_addr ifaddr) #endif err = setsockopt(qpim_mroute_socket_fd, IPPROTO_IP, MRT_ADD_VIF, (void*) &vc, sizeof(vc)); + if (err) + err = setsockopt(qpim_mroute_socket_fd, IPPROTO_IP, MRT_ADD_VIF, (void*) &vc, sizeof(vc.vc)); if (err) { char ifaddr_str[100]; int e = errno; diff --git a/pimd/pim_mroute.h b/pimd/pim_mroute.h index 350b1e37..9aa48a43 100644 --- a/pimd/pim_mroute.h +++ b/pimd/pim_mroute.h @@ -82,6 +82,11 @@ struct vifctl { }; #endif +struct vifctl_ext { + struct vifctl vc; /* vifctl */ + int ifindex; /* interface index */ +}; + #ifndef HAVE_STRUCT_MFCCTL struct mfcctl { struct in_addr mfcc_origin; /* Origin of mcast */ |