diff options
Diffstat (limited to 'accel-pppd')
-rw-r--r-- | accel-pppd/ctrl/ipoe/ipoe.c | 53 | ||||
-rw-r--r-- | accel-pppd/include/vlan_mon.h | 2 | ||||
-rw-r--r-- | accel-pppd/vlan-mon/vlan_mon.c | 53 |
3 files changed, 54 insertions, 54 deletions
diff --git a/accel-pppd/ctrl/ipoe/ipoe.c b/accel-pppd/ctrl/ipoe/ipoe.c index d77da31..46ab130 100644 --- a/accel-pppd/ctrl/ipoe/ipoe.c +++ b/accel-pppd/ctrl/ipoe/ipoe.c @@ -2881,59 +2881,6 @@ out_err: return -1; } -static int parse_vlan_mon(const char *opt, long *mask) -{ - char *ptr, *ptr2; - int vid, vid2; - - ptr = strchr(opt, ','); - if (!ptr) - ptr = strchr(opt, 0); - - if (*ptr == ',') - memset(mask, 0xff, 4096/8); - else if (*ptr == 0) { - memset(mask, 0, 4096/8); - return 0; - } else - goto out_err; - - while (1) { - vid = strtol(ptr + 1, &ptr2, 10); - if (vid <= 0 || vid >= 4096) { - log_error("ipoe: vlan-mon=%s: invalid vlan %i\n", opt, vid); - return -1; - } - - if (*ptr2 == '-') { - vid2 = strtol(ptr2 + 1, &ptr2, 10); - if (vid2 <= 0 || vid2 >= 4096) { - log_error("ipoe: vlan-mon=%s: invalid vlan %i\n", opt, vid2); - return -1; - } - - for (; vid < vid2; vid++) - mask[vid / (8*sizeof(long))] &= ~(1lu << (vid % (8*sizeof(long)))); - } - - mask[vid / (8*sizeof(long))] &= ~(1lu << (vid % (8*sizeof(long)))); - - if (*ptr2 == 0) - break; - - if (*ptr2 != ',') - goto out_err; - - ptr = ptr2; - } - - return 0; - -out_err: - log_error("ipoe: vlan-mon=%s: failed to parse\n", opt); - return -1; -} - static void add_vlan_mon(const char *opt, long *mask) { const char *ptr; diff --git a/accel-pppd/include/vlan_mon.h b/accel-pppd/include/vlan_mon.h index 928c732..c6b2db7 100644 --- a/accel-pppd/include/vlan_mon.h +++ b/accel-pppd/include/vlan_mon.h @@ -10,6 +10,6 @@ int vlan_mon_add_vid(int ifindex, int proto, int vid); int vlan_mon_del(int ifindex, int proto); int make_vlan_name(const char *pattern, const char *parent, int svid, int cvid, char *name); - +int parse_vlan_mon(const char *opt, long *mask); #endif diff --git a/accel-pppd/vlan-mon/vlan_mon.c b/accel-pppd/vlan-mon/vlan_mon.c index 898d7dc..7f15aa0 100644 --- a/accel-pppd/vlan-mon/vlan_mon.c +++ b/accel-pppd/vlan-mon/vlan_mon.c @@ -305,6 +305,59 @@ int __export make_vlan_name(const char *pattern, const char *parent, int svid, i return 0; } +int __export parse_vlan_mon(const char *opt, long *mask) +{ + char *ptr, *ptr2; + int vid, vid2; + + ptr = strchr(opt, ','); + if (!ptr) + ptr = strchr(opt, 0); + + if (*ptr == ',') + memset(mask, 0xff, 4096/8); + else if (*ptr == 0) { + memset(mask, 0, 4096/8); + return 0; + } else + goto out_err; + + while (1) { + vid = strtol(ptr + 1, &ptr2, 10); + if (vid <= 0 || vid >= 4096) { + log_error("vlan-mon=%s: invalid vlan %i\n", opt, vid); + return -1; + } + + if (*ptr2 == '-') { + vid2 = strtol(ptr2 + 1, &ptr2, 10); + if (vid2 <= 0 || vid2 >= 4096) { + log_error("vlan-mon=%s: invalid vlan %i\n", opt, vid2); + return -1; + } + + for (; vid < vid2; vid++) + mask[vid / (8*sizeof(long))] &= ~(1lu << (vid % (8*sizeof(long)))); + } + + mask[vid / (8*sizeof(long))] &= ~(1lu << (vid % (8*sizeof(long)))); + + if (*ptr2 == 0) + break; + + if (*ptr2 != ',') + goto out_err; + + ptr = ptr2; + } + + return 0; + +out_err: + log_error("vlan-mon=%s: failed to parse\n", opt); + return -1; +} + static void vlan_mon_mc_close(struct triton_context_t *ctx) { |