summaryrefslogtreecommitdiff
path: root/accel-pptpd/ctrl/pppoe/pppoe.c
diff options
context:
space:
mode:
authorKozlov Dmitry <dima@server>2010-11-11 11:45:18 +0300
committerKozlov Dmitry <dima@server>2010-11-11 11:45:18 +0300
commitdda81cb1d1ba0229aa4c9a90a6f2b2012a4e9326 (patch)
treecb59715c7ca9e0bd61d35bfccdd0b4a86fe1b4b1 /accel-pptpd/ctrl/pppoe/pppoe.c
parent8c58b84d5d246db41d02ee28448d24a4bfd3c02f (diff)
downloadaccel-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.c15
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) {