summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2019-05-13 11:51:17 +0300
committerDmitry Kozlov <xeb@mail.ru>2019-05-13 11:51:17 +0300
commit85ace14ed9976e98081068fe2e797fcf09e08148 (patch)
tree7daecd3615d17ce70c5d6c492b950d4c360c6d83 /accel-pppd/ctrl
parent6f433706a152ea987899fd830ff399e257b0f2a6 (diff)
parente909de9c6afd0581c8847b3676b200f4c0b7237b (diff)
downloadaccel-ppp-85ace14ed9976e98081068fe2e797fcf09e08148.tar.gz
accel-ppp-85ace14ed9976e98081068fe2e797fcf09e08148.zip
Merge branch 'master' of github.com:xebd/accel-ppp
Diffstat (limited to 'accel-pppd/ctrl')
-rw-r--r--accel-pppd/ctrl/ipoe/arp.c2
-rw-r--r--accel-pppd/ctrl/ipoe/ipoe.c11
-rw-r--r--accel-pppd/ctrl/pppoe/pppoe.c1
3 files changed, 11 insertions, 3 deletions
diff --git a/accel-pppd/ctrl/ipoe/arp.c b/accel-pppd/ctrl/ipoe/arp.c
index 0698bd1c..1979c762 100644
--- a/accel-pppd/ctrl/ipoe/arp.c
+++ b/accel-pppd/ctrl/ipoe/arp.c
@@ -59,6 +59,7 @@ static void arp_ctx_read(struct _arphdr *ah)
memset(&dst, 0, sizeof(dst));
dst.sll_family = AF_PACKET;
dst.sll_ifindex = ipoe->ifindex;
+ dst.sll_halen = ETH_ALEN;
dst.sll_protocol = htons(ETH_P_ARP);
ah2.ar_hrd = htons(ARPHRD_ETHER);
@@ -136,6 +137,7 @@ void arp_send(int ifindex, struct _arphdr *arph, int broadcast)
memset(&dst, 0, sizeof(dst));
dst.sll_family = AF_PACKET;
dst.sll_ifindex = ifindex;
+ dst.sll_halen = ETH_ALEN;
dst.sll_protocol = htons(ETH_P_ARP);
if (broadcast)
memcpy(dst.sll_addr, bc_addr, ETH_ALEN);
diff --git a/accel-pppd/ctrl/ipoe/ipoe.c b/accel-pppd/ctrl/ipoe/ipoe.c
index 5b44622d..556bad72 100644
--- a/accel-pppd/ctrl/ipoe/ipoe.c
+++ b/accel-pppd/ctrl/ipoe/ipoe.c
@@ -1646,7 +1646,7 @@ static int ipoe_serv_request_check(struct ipoe_serv *serv, uint32_t xid)
list_del(&r->entry);
mempool_free(r);
} else if (r->xid == xid) {
- if (++r->cnt == conf_max_request) {
+ if (++r->cnt >= conf_max_request) {
list_del(&r->entry);
mempool_free(r);
return 1;
@@ -1660,7 +1660,7 @@ static int ipoe_serv_request_check(struct ipoe_serv *serv, uint32_t xid)
r = mempool_alloc(req_item_pool);
r->xid = xid;
r->expire = ts.tv_sec + 30;
- r->cnt = 0;
+ r->cnt = 1;
list_add_tail(&r->entry, &serv->req_list);
return 0;
@@ -1825,7 +1825,12 @@ static void __ipoe_recv_dhcpv4(struct dhcpv4_serv *dhcpv4, struct dhcpv4_packet
else if (opt82_ses) {
dhcpv4_packet_ref(pack);
triton_context_call(&opt82_ses->ctx, (triton_event_func)mac_change_detected, pack);
- } else if (ipoe_serv_request_check(serv, pack->hdr->xid))
+ }
+
+ if (ap_shutdown)
+ goto out;
+
+ if (ipoe_serv_request_check(serv, pack->hdr->xid))
dhcpv4_send_nak(dhcpv4, pack);
} else {
if (ses->terminate) {
diff --git a/accel-pppd/ctrl/pppoe/pppoe.c b/accel-pppd/ctrl/pppoe/pppoe.c
index 7ab20e35..12b54004 100644
--- a/accel-pppd/ctrl/pppoe/pppoe.c
+++ b/accel-pppd/ctrl/pppoe/pppoe.c
@@ -748,6 +748,7 @@ static void pppoe_send(struct pppoe_serv_t *serv, const uint8_t *pack)
.sll_family = AF_PACKET,
.sll_protocol = htons(ETH_P_PPP_DISC),
.sll_ifindex = serv->ifindex,
+ .sll_halen = ETH_ALEN,
};
struct pppoe_hdr *hdr = (struct pppoe_hdr *)(pack + ETH_HLEN);