Added ability to define up to 5 IPv6 prefix delegation by user

This commit is contained in:
fendo 2014-09-16 17:34:39 +02:00
parent 935445b29a
commit e98fe68174
7 changed files with 400 additions and 53 deletions

View file

@ -533,7 +533,8 @@ void processrad(uint8_t *buf, int len, char socket_index)
sessionidt s;
tunnelidt t = 0;
hasht hash;
uint8_t routes = 0;
int routes = 0;
int routes6 = 0;
int r_code;
int r_id;
int OpentunnelReq = 0;
@ -786,11 +787,17 @@ void processrad(uint8_t *buf, int len, char socket_index)
if (prefixlen)
{
LOG(3, s, session[s].tunnel,
" Radius reply contains route for %s/%d\n",
n, prefixlen);
session[s].ipv6route = r6;
session[s].ipv6prefixlen = prefixlen;
if (routes6 == MAXROUTE6)
{
LOG(1, s, session[s].tunnel, " Too many IPv6 routes\n");
}
else
{
LOG(3, s, session[s].tunnel, " Radius reply contains route for %s/%d\n", n, prefixlen);
session[s].route6[routes6].ipv6route = r6;
session[s].route6[routes6].ipv6prefixlen = prefixlen;
routes6++;
}
}
}
else if (*p == 123)
@ -799,10 +806,19 @@ void processrad(uint8_t *buf, int len, char socket_index)
if ((p[1] > 4) && (p[3] > 0) && (p[3] <= 128))
{
char ipv6addr[INET6_ADDRSTRLEN];
memcpy(&session[s].ipv6route, &p[4], p[1] - 4);
session[s].ipv6prefixlen = p[3];
LOG(3, s, session[s].tunnel, " Radius reply contains Delegated IPv6 Prefix %s/%d\n",
inet_ntop(AF_INET6, &session[s].ipv6route, ipv6addr, INET6_ADDRSTRLEN), session[s].ipv6prefixlen);
if (routes6 == MAXROUTE6)
{
LOG(1, s, session[s].tunnel, " Too many IPv6 routes\n");
}
else
{
memcpy(&session[s].route6[routes6].ipv6route, &p[4], p[1] - 4);
session[s].route6[routes6].ipv6prefixlen = p[3];
LOG(3, s, session[s].tunnel, " Radius reply contains Delegated IPv6 Prefix %s/%d\n",
inet_ntop(AF_INET6, &session[s].route6[routes6].ipv6route, ipv6addr, INET6_ADDRSTRLEN), session[s].route6[routes6].ipv6prefixlen);
routes6++;
}
}
}
else if (*p == 168)