| plan 9 kernel history: overview | file list | diff list |
1998/0313/ip/gre.c (diff list | history)
| 1998/0306/sys/src/9/ip/gre.c:39,47 – 1998/0313/sys/src/9/ip/gre.c:39,51 (short | long | prev | next) | ||
| 1998/0306 | uchar eproto[2]; /* encapsulation protocol */ | |
| 1997/0327 | } GREhdr; | |
| 1998/0313 | typedef struct GREpriv GREpriv; struct GREpriv { /* non-MIB stats */ ulong csumerr; /* checksum errors */ ulong lenerr; /* short packet */ }; | |
| 1997/0327 | static char* greconnect(Conv *c, char **argv, int argc) | |
| 1998/0306/sys/src/9/ip/gre.c:75,81 – 1998/0313/sys/src/9/ip/gre.c:79,85 | ||
| 1997/0327 | ||
| 1997/0403 | if(err != nil) return err; | |
| 1998/0313 | Fsconnected(c, nil); | |
| 1997/0327 | ||
| 1997/0403 | return nil; | |
| 1997/0327 | } | |
| 1998/0306/sys/src/9/ip/gre.c:147,153 – 1998/0313/sys/src/9/ip/gre.c:151,157 | ||
| 1998/0306 | v4tov6(laddr, ghp->src); if(ipcmp(laddr, v4prefix) == 0){ if(ipcmp(c->laddr, IPnoaddr) == 0) | |
| 1998/0313 | findlocalip(c->p->f, c->laddr, raddr); /* pick interface closest to dest */ | |
| 1998/0306 | memmove(ghp->src, c->laddr + IPv4off, IPv4addrlen); } | |
| 1997/0530 | ||
| 1998/0306/sys/src/9/ip/gre.c:156,166 – 1998/0313/sys/src/9/ip/gre.c:160,170 | ||
| 1997/0522 | ghp->frag[0] = 0; ghp->frag[1] = 0; | |
| 1997/0327 |
| |
| 1998/0313 | ipoput(c->p->f, bp, 0, c->ttl); | |
| 1997/0327 | } static void | |
| 1998/0306 |
| |
| 1998/0313 | greiput(Proto *gre, uchar*, Block *bp) | |
| 1997/0327 | { int len; GREhdr *ghp; | |
| 1998/0306/sys/src/9/ip/gre.c:167,173 – 1998/0313/sys/src/9/ip/gre.c:171,179 | ||
| 1997/0327 | Conv *c, **p; ushort eproto; | |
| 1998/0306 | uchar raddr[IPaddrlen]; | |
| 1998/0313 | GREpriv *gpriv; | |
| 1997/0327 | ||
| 1998/0313 | gpriv = gre->priv; | |
| 1997/0327 | ghp = (GREhdr*)(bp->rp); | |
| 1998/0306 | v4tov6(raddr, ghp->src); | |
| 1998/0306/sys/src/9/ip/gre.c:175,181 – 1998/0313/sys/src/9/ip/gre.c:181,187 | ||
| 1997/0327 | /* Look for a conversation structure for this port and address */ c = nil; | |
| 1998/0313 | for(p = gre->conv; *p; p++) { | |
| 1997/0327 | c = *p; if(c->inuse == 0) continue; | |
| 1998/0306/sys/src/9/ip/gre.c:198,204 – 1998/0313/sys/src/9/ip/gre.c:204,210 | ||
| 1997/0327 | } | |
| 1997/0530 | bp = trimblock(bp, GRE_IPONLY, len); | |
| 1997/0327 | if(bp == nil){ | |
| 1998/0313 | gpriv->lenerr++; | |
| 1997/0327 | return; } | |
| 1998/0306/sys/src/9/ip/gre.c:216,245 – 1998/0313/sys/src/9/ip/gre.c:222,257 | ||
| 1997/0327 | } | |
| 1998/0306 | int | |
| 1998/0313 | grestats(Proto *gre, char *buf, int len) | |
| 1998/0306 | { | |
| 1998/0313 | GREpriv *gpriv; gpriv = gre->priv; return snprint(buf, len, "gre: len %d\n", gpriv->lenerr); | |
| 1998/0306 | } | |
| 1997/0327 | void greinit(Fs *fs) { | |
| 1998/0306 |
| |
| 1997/0327 |
| |
| 1998/0313 | Proto *gre; | |
| 1997/0327 |
| |
| 1998/0313 | gre = smalloc(sizeof(Proto)); gre->priv = smalloc(sizeof(GREpriv)); gre->name = "gre"; gre->kick = grekick; gre->connect = greconnect; gre->announce = greannounce; gre->state = grestate; gre->create = grecreate; gre->close = greclose; gre->rcv = greiput; gre->ctl = nil; gre->advise = nil; gre->stats = grestats; gre->ipproto = IP_GREPROTO; gre->nc = 64; gre->ptclsize = 0; Fsproto(fs, gre); | |
| 1997/0327 | } | |