diff options
author | Kozlov Dmitry <dima@server> | 2010-11-11 11:45:18 +0300 |
---|---|---|
committer | Kozlov Dmitry <dima@server> | 2010-11-11 11:45:18 +0300 |
commit | dda81cb1d1ba0229aa4c9a90a6f2b2012a4e9326 (patch) | |
tree | cb59715c7ca9e0bd61d35bfccdd0b4a86fe1b4b1 /accel-pptpd/ctrl/pppoe/pppoe.c | |
parent | 8c58b84d5d246db41d02ee28448d24a4bfd3c02f (diff) | |
download | accel-ppp-dda81cb1d1ba0229aa4c9a90a6f2b2012a4e9326.tar.gz accel-ppp-dda81cb1d1ba0229aa4c9a90a6f2b2012a4e9326.zip |
pppoe: implemented mac filter
Diffstat (limited to 'accel-pptpd/ctrl/pppoe/pppoe.c')
-rw-r--r-- | accel-pptpd/ctrl/pppoe/pppoe.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/accel-pptpd/ctrl/pppoe/pppoe.c b/accel-pptpd/ctrl/pppoe/pppoe.c index ef661bc4..73752920 100644 --- a/accel-pptpd/ctrl/pppoe/pppoe.c +++ b/accel-pptpd/ctrl/pppoe/pppoe.c @@ -791,34 +791,37 @@ static int pppoe_serv_read(struct triton_md_handler_t *h) if (n < ETH_HLEN + sizeof(*hdr)) { if (conf_verbose) log_warn("pppoe: short packet received (%i)\n", n); - return 0; + continue; } + if (mac_filter_check(ethhdr->h_source)) + continue; + if (memcmp(ethhdr->h_dest, bc_addr, ETH_ALEN) && memcmp(ethhdr->h_dest, serv->hwaddr, ETH_ALEN)) - return 0; + continue; if (!memcmp(ethhdr->h_source, bc_addr, ETH_ALEN)) { if (conf_verbose) log_warn("pppoe: discarding packet (host address is broadcast)\n"); - return 0; + continue; } if ((ethhdr->h_source[0] & 1) != 0) { if (conf_verbose) log_warn("pppoe: discarding packet (host address is not unicast)\n"); - return 0; + continue; } if (n < ETH_HLEN + sizeof(*hdr) + ntohs(hdr->length)) { if (conf_verbose) log_warn("pppoe: short packet received\n"); - return 0; + continue; } if (hdr->ver != 1) { if (conf_verbose) log_warn("pppoe: discarding packet (unsupported version %i)\n", hdr->ver); - return 0; + continue; } if (hdr->type != 1) { |