return;
len = ntohs(hdr->length);
- for (n = 0; n < len; n += sizeof(*tag) + ntohs(tag->tag_len)) {
+ for (n = 0; n < len; n += sizeof(*tag) + ntohs(tag->tag_len))
+ {
tag = (struct pppoe_tag *)(pack + ETH_HLEN + sizeof(*hdr) + n);
if (n + sizeof(*tag) + ntohs(tag->tag_len) > len)
return;
- switch (ntohs(tag->tag_type)) {
+ switch (ntohs(tag->tag_type))
+ {
case TAG_END_OF_LIST:
break;
case TAG_SERVICE_NAME:
- if (*config->pppoe_service_name && tag->tag_len)
+ if (config->pppoe_only_equal_svc_name && *config->pppoe_service_name && !tag->tag_len)
+ {
+ break;
+ }
+ else if (*config->pppoe_service_name && tag->tag_len)
{
if (ntohs(tag->tag_len) != strlen(config->pppoe_service_name))
break;
if (memcmp(tag->tag_data, config->pppoe_service_name, ntohs(tag->tag_len)))
break;
+ service_name_tag = tag;
service_match = 1;
}
else
// Update STAT OUT
increment_counter(&session[s].cout, &session[s].cout_wrap, ll2tp); // byte count
session[s].cout_delta += ll2tp;
- session[s].coutgrp_delta += ll2tp;
session[s].pout++;
sess_local[s].cout += ll2tp;
sess_local[s].pout++;
// Update STAT OUT
increment_counter(&session[s].cout, &session[s].cout_wrap, lpppoe); // byte count
session[s].cout_delta += lpppoe;
- session[s].coutgrp_delta += lpppoe;
session[s].pout++;
sess_local[s].cout += lpppoe;
sess_local[s].pout++;