X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/8d94f2020d372385156e9618d6279ba964ba8870..eef4a6a9429c38bfc2293a34593922ccb8bb20c7:/ppp.c diff --git a/ppp.c b/ppp.c index 21f5985..29bf1bc 100644 --- a/ppp.c +++ b/ppp.c @@ -5,7 +5,9 @@ #include #include #include +#include #include + #include "dhcp6.h" #include "l2tpns.h" #include "constants.h" @@ -1480,6 +1482,7 @@ void processipcp(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) static void ipv6cp_open(sessionidt s, tunnelidt t) { int i; + groupidt g; LOG(3, s, t, "IPV6CP: Opened\n"); change_state(s, ipv6cp, Opened); @@ -1495,6 +1498,12 @@ static void ipv6cp_open(sessionidt s, tunnelidt t) route6set(s, session[s].ipv6address, 128, 1); } + if ((g = grp_groupbysession(s))) + { + grp_setgrouproute6(g, 1); + cluster_send_groupe(g); + } + // Send an initial RA (TODO: Should we send these regularly?) send_ipv6_ra(s, t, NULL); } @@ -2265,7 +2274,8 @@ void processipv6in(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l) if (session[s].ipv6address.s6_addr[0]) { if ((sessionbyipv6new(ip) != s) && - (ip.s6_addr[0] != 0xFE || ip.s6_addr[1] != 0x80 || ip.s6_addr16[1] != 0 || ip.s6_addr16[2] != 0 || ip.s6_addr16[3] != 0)) + (ip.s6_addr[0] != 0xFE || ip.s6_addr[1] != 0x80 || ip.s6_addr16[1] != 0 || ip.s6_addr16[2] != 0 || ip.s6_addr16[3] != 0) && + (!grp_groupbyipv6(ip))) { char str[INET6_ADDRSTRLEN]; LOG(5, s, t, "Dropping packet with spoofed IP %s\n",