diff options
author | Dmitry Kozlov <xeb@mail.ru> | 2016-04-04 14:17:25 +0300 |
---|---|---|
committer | Dmitry Kozlov <xeb@mail.ru> | 2016-04-04 14:17:25 +0300 |
commit | 581d4533cee479516132a089844b7fc6c32b59ae (patch) | |
tree | f1610e0c43c958fe53769c2d60254ae382bea4d5 /accel-pppd/libnetlink/iputils.c | |
parent | b29c9326c2630a0375a9d92b0c553b6e60c8cdaa (diff) | |
download | accel-ppp-581d4533cee479516132a089844b7fc6c32b59ae.tar.gz accel-ppp-581d4533cee479516132a089844b7fc6c32b59ae.zip |
ipoe,pppoe,vlan_mon: deleted conditions to simultaneous start ipoe and pppoe on same interfaces (started by vlan_mon)
Diffstat (limited to 'accel-pppd/libnetlink/iputils.c')
-rw-r--r-- | accel-pppd/libnetlink/iputils.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/accel-pppd/libnetlink/iputils.c b/accel-pppd/libnetlink/iputils.c index e9b8285..ee53674 100644 --- a/accel-pppd/libnetlink/iputils.c +++ b/accel-pppd/libnetlink/iputils.c @@ -72,7 +72,9 @@ static int store_nlmsg(const struct sockaddr_nl *who, struct nlmsghdr *n, void * { struct ifinfomsg *ifi = NLMSG_DATA(n); struct rtattr *tb[IFLA_MAX + 1]; + struct rtattr *tb2[IFLA_MAX + 1]; struct arg *a = arg; + int vid = 0, iflink = 0; if (n->nlmsg_type != RTM_NEWLINK) return 0; @@ -86,9 +88,19 @@ static int store_nlmsg(const struct sockaddr_nl *who, struct nlmsghdr *n, void * if (tb[IFLA_IFNAME] == NULL) return 0; + if (tb[IFLA_LINKINFO]) { + parse_rtattr_nested(tb2, IFLA_MAX, tb[IFLA_LINKINFO]); + if (!strcmp(RTA_DATA(tb2[IFLA_INFO_KIND]), "vlan")) { + parse_rtattr_nested(tb2, IFLA_MAX, tb2[IFLA_INFO_DATA]); + vid = *(uint16_t *)RTA_DATA(tb2[IFLA_VLAN_ID]); + } + } + + if (tb[IFLA_LINK]) + iflink = *(int *)RTA_DATA(tb[IFLA_LINK]); //printf("%i %s\n", ifi->ifi_index, RTA_DATA(tb[IFLA_IFNAME])); - return a->func(ifi->ifi_index, ifi->ifi_flags, RTA_DATA(tb[IFLA_IFNAME]), a->arg); + return a->func(ifi->ifi_index, ifi->ifi_flags, RTA_DATA(tb[IFLA_IFNAME]), iflink, vid, a->arg); } int __export iplink_list(iplink_list_func func, void *arg) @@ -250,7 +262,7 @@ int __export iplink_vlan_del(int ifindex) return 0; } -int __export iplink_vlan_get_vid(int ifindex) +int __export iplink_vlan_get_vid(int ifindex, int *iflink) { struct iplink_req { struct nlmsghdr n; @@ -294,6 +306,9 @@ int __export iplink_vlan_get_vid(int ifindex) if (!tb[IFLA_LINKINFO]) return 0; + if (iflink && tb[IFLA_LINK]) + *iflink = *(int *)RTA_DATA(tb[IFLA_LINK]); + parse_rtattr_nested(tb, IFLA_MAX, tb[IFLA_LINKINFO]); if (strcmp(RTA_DATA(tb[IFLA_INFO_KIND]), "vlan")) |