ip/dhcp6d: ignore short and from non-local source packets
This commit is contained in:
parent
71402b2ea1
commit
232382bfc1
1 changed files with 28 additions and 7 deletions
|
@ -113,6 +113,21 @@ findifc(char *net, uchar ip[IPaddrlen])
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Iplifc*
|
||||||
|
localonifc(Ipifc *ifc, uchar ip[IPaddrlen])
|
||||||
|
{
|
||||||
|
Iplifc *lifc;
|
||||||
|
uchar net[IPaddrlen];
|
||||||
|
|
||||||
|
for(lifc = ifc->lifc; lifc != nil; lifc = lifc->next){
|
||||||
|
maskip(ip, lifc->mask, net);
|
||||||
|
if(ipcmp(net, lifc->net) == 0)
|
||||||
|
return lifc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
openlisten(char *net)
|
openlisten(char *net)
|
||||||
{
|
{
|
||||||
|
@ -310,21 +325,27 @@ main(int argc, char *argv[])
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
while((n = read(fd, ibuf, sizeof(ibuf))) > Udphdrsize+4){
|
while((n = read(fd, ibuf, sizeof(ibuf))) > 0){
|
||||||
r->req.p = ibuf+Udphdrsize;
|
if(n < Udphdrsize+4)
|
||||||
r->req.e = ibuf+n;
|
continue;
|
||||||
|
|
||||||
|
r->udp = (Udphdr*)ibuf;
|
||||||
|
if(isv4(r->udp->raddr))
|
||||||
|
continue;
|
||||||
|
if((r->ifc = findifc(netmtpt, r->udp->ifcaddr)) == nil)
|
||||||
|
continue;
|
||||||
|
if(localonifc(r->ifc, r->udp->raddr) == nil)
|
||||||
|
continue;
|
||||||
|
|
||||||
memmove(obuf, ibuf, Udphdrsize);
|
memmove(obuf, ibuf, Udphdrsize);
|
||||||
r->udp = (Udphdr*)obuf;
|
r->req.p = ibuf+Udphdrsize;
|
||||||
|
r->req.e = ibuf+n;
|
||||||
r->resp.p = obuf+Udphdrsize;
|
r->resp.p = obuf+Udphdrsize;
|
||||||
r->resp.e = &obuf[sizeof(obuf)];
|
r->resp.e = &obuf[sizeof(obuf)];
|
||||||
|
|
||||||
r->tra = r->req.p[1]<<16 | r->req.p[2]<<8 | r->req.p[3];
|
r->tra = r->req.p[1]<<16 | r->req.p[2]<<8 | r->req.p[3];
|
||||||
r->req.t = r->req.p[0];
|
r->req.t = r->req.p[0];
|
||||||
|
|
||||||
if((r->ifc = findifc(netmtpt, r->udp->ifcaddr)) == nil)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if(debug)
|
if(debug)
|
||||||
fprint(2, "%I->%I(%s) typ=%d tra=%x\n",
|
fprint(2, "%I->%I(%s) typ=%d tra=%x\n",
|
||||||
r->udp->raddr, r->udp->laddr, r->ifc->dev,
|
r->udp->raddr, r->udp->laddr, r->ifc->dev,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue