added support for sending link prefix to RPL border router

This commit is contained in:
joxe 2010-05-25 19:05:31 +00:00
parent 6c4bf93141
commit 8e619e991d

View file

@ -29,7 +29,7 @@
* *
* This file is part of the uIP TCP/IP stack. * This file is part of the uIP TCP/IP stack.
* *
* $Id: tunslip6.c,v 1.3 2010/05/07 12:22:41 nifi Exp $ * $Id: tunslip6.c,v 1.4 2010/05/25 19:05:31 joxe Exp $
* *
*/ */
@ -55,11 +55,16 @@
#include <err.h> #include <err.h>
int verbose = 0; int verbose = 0;
const char *ipaddr;
const char *netmask;
int slipfd = 0;
int ssystem(const char *fmt, ...) int ssystem(const char *fmt, ...)
__attribute__((__format__ (__printf__, 1, 2))); __attribute__((__format__ (__printf__, 1, 2)));
void write_to_serial(int outfd, void *inbuf, int len); void write_to_serial(int outfd, void *inbuf, int len);
void slip_send(int fd, unsigned char c);
//#define PROGRESS(s) fprintf(stderr, s) //#define PROGRESS(s) fprintf(stderr, s)
#define PROGRESS(s) do { } while (0) #define PROGRESS(s) do { } while (0)
@ -169,7 +174,28 @@ serial_to_tun(FILE *inslip, int outfd)
ssystem("ifconfig %s down", tundev); ssystem("ifconfig %s down", tundev);
ssystem("ifconfig %s hw ether %s", tundev, &macs[6]); ssystem("ifconfig %s hw ether %s", tundev, &macs[6]);
ssystem("ifconfig %s up", tundev); ssystem("ifconfig %s up", tundev);
} } else if(uip.inbuf[1] == 'P') {
/* Prefix info requested */
struct in6_addr addr;
int i;
char *s = strchr(ipaddr, '/');
if(s != NULL) {
*s = '\0';
}
inet_pton(AF_INET6, ipaddr, &addr);
printf("*** Address:%s => %02x%02x:%02x%02x:%02x%02x:%02x%02x\n",
ipaddr,
addr.s6_addr[0], addr.s6_addr[1],
addr.s6_addr[2], addr.s6_addr[3],
addr.s6_addr[4], addr.s6_addr[5],
addr.s6_addr[6], addr.s6_addr[7]);
slip_send(slipfd, '!');
slip_send(slipfd, 'P');
for(i = 0; i < 8; i++) {
slip_send(slipfd, addr.s6_addr[i]);
}
slip_send(slipfd, SLIP_END);
}
#define DEBUG_LINE_MARKER '\r' #define DEBUG_LINE_MARKER '\r'
} else if(uip.inbuf[0] == DEBUG_LINE_MARKER) { } else if(uip.inbuf[0] == DEBUG_LINE_MARKER) {
fwrite(uip.inbuf + 1, inbufptr - 1, 1, stdout); fwrite(uip.inbuf + 1, inbufptr - 1, 1, stdout);
@ -410,9 +436,6 @@ tun_alloc(char *dev, int tap)
} }
#endif #endif
const char *ipaddr;
const char *netmask;
void void
cleanup(void) cleanup(void)
{ {
@ -473,7 +496,7 @@ int
main(int argc, char **argv) main(int argc, char **argv)
{ {
int c; int c;
int tunfd, slipfd, maxfd; int tunfd, maxfd;
int ret; int ret;
fd_set rset, wset; fd_set rset, wset;
FILE *inslip; FILE *inslip;