diff options
author | Dmitry Kozlov <xeb@mail.ru> | 2015-11-18 18:43:30 +0300 |
---|---|---|
committer | Dmitry Kozlov <xeb@mail.ru> | 2015-11-18 18:43:30 +0300 |
commit | decb3de44c59f789e49250c4d2791e4219078b54 (patch) | |
tree | 27c80ce7be931a4372e13bbdb253d059dabef2e5 /accel-pppd/ctrl/ipoe/ipoe.c | |
parent | 1e505332a84bef2857f07155f0c188742303be76 (diff) | |
download | accel-ppp-decb3de44c59f789e49250c4d2791e4219078b54.tar.gz accel-ppp-decb3de44c59f789e49250c4d2791e4219078b54.zip |
ipoe: for vlan name pattern implemented %P argument - VID of parent interface
Diffstat (limited to 'accel-pppd/ctrl/ipoe/ipoe.c')
-rw-r--r-- | accel-pppd/ctrl/ipoe/ipoe.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/accel-pppd/ctrl/ipoe/ipoe.c b/accel-pppd/ctrl/ipoe/ipoe.c index 61e040eb..594df29e 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.c +++ b/accel-pppd/ctrl/ipoe/ipoe.c @@ -2205,13 +2205,14 @@ static int get_offer_delay() return 0; } -static int make_vlan_name(const char *parent, int vid, char *name) +static int make_vlan_name(const char *parent, int svid, int cvid, char *name) { char *ptr1 = name, *endptr = name + IFNAMSIZ; const char *ptr2 = conf_vlan_name; - char num[5], *ptr3 = num; + char svid_str[5], cvid_str[5], *ptr3; - sprintf(num, "%i", vid); + sprintf(svid_str, "%i", svid); + sprintf(cvid_str, "%i", cvid); while (ptr1 < endptr && *ptr2) { if (ptr2[0] == '%' && ptr2[1] == 'I') { @@ -2219,6 +2220,12 @@ static int make_vlan_name(const char *parent, int vid, char *name) *ptr1++ = *parent++; ptr2 += 2; } else if (ptr2[0] == '%' && ptr2[1] == 'N') { + ptr3 = cvid_str; + while (ptr1 < endptr && *ptr3) + *ptr1++ = *ptr3++; + ptr2 += 2; + } else if (ptr2[0] == '%' && ptr2[1] == 'P') { + ptr3 = svid_str; while (ptr1 < endptr && *ptr3) *ptr1++ = *ptr3++; ptr2 += 2; @@ -2240,7 +2247,7 @@ void ipoe_vlan_notify(int ifindex, int vid) struct conf_option_t *opt; struct ifreq ifr; char *ptr; - int len, r; + int len, r, svid; pcre *re = NULL; const char *pcre_err; char *pattern; @@ -2257,7 +2264,9 @@ void ipoe_vlan_notify(int ifindex, int vid) return; } - if (make_vlan_name(ifr.ifr_name, vid, ifname)) { + svid = iplink_vlan_get_vid(ifindex); + + if (make_vlan_name(ifr.ifr_name, svid, vid, ifname)) { log_error("ipoe: vlan-mon: %s.%i: interface name is too long\n", ifr.ifr_name, vid); return; } |