Change typedef of uip_ipaddr_t from a vector type to a union.

typedef union uip_ip4addr_t {
  u16_t u16[2];
  u8_t  u8[4];
} uip_ip4addr_t;

typedef uip_ip4addr_t uip_ipaddr_t;

This implies that one must consistently pass pointers to
uip_ipaddr_t:s and not mix and match pointers with
uip_ipaddr_t:s as was done earlier.
This commit is contained in:
bg- 2006-08-09 16:13:39 +00:00
parent 2fe1ccf8c5
commit fb94d50410
30 changed files with 253 additions and 270 deletions

View file

@ -28,7 +28,7 @@
* *
* This file is part of the uIP TCP/IP stack. * This file is part of the uIP TCP/IP stack.
* *
* $Id: httpd-cgi.c,v 1.1 2006/06/17 22:41:14 adamdunkels Exp $ * $Id: httpd-cgi.c,v 1.2 2006/08/09 16:13:39 bg- Exp $
* *
*/ */
@ -157,10 +157,10 @@ make_tcp_stats(void *arg)
return sprintf((char *)uip_appdata, return sprintf((char *)uip_appdata,
"<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n", "<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n",
htons(conn->lport), htons(conn->lport),
htons(conn->ripaddr[0]) >> 8, conn->ripaddr.u8[0],
htons(conn->ripaddr[0]) & 0xff, conn->ripaddr.u8[1],
htons(conn->ripaddr[1]) >> 8, conn->ripaddr.u8[2],
htons(conn->ripaddr[1]) & 0xff, conn->ripaddr.u8[3],
htons(conn->rport), htons(conn->rport),
states[conn->tcpstateflags & UIP_TS_MASK], states[conn->tcpstateflags & UIP_TS_MASK],
conn->nrtx, conn->nrtx,

View file

@ -30,7 +30,7 @@
* *
* Author: Adam Dunkels <adam@sics.se> * Author: Adam Dunkels <adam@sics.se>
* *
* $Id: httpd.c,v 1.1 2006/06/17 22:41:14 adamdunkels Exp $ * $Id: httpd.c,v 1.2 2006/08/09 16:13:39 bg- Exp $
*/ */
#include "contiki-net.h" #include "contiki-net.h"
@ -249,7 +249,7 @@ PT_THREAD(handle_input(struct httpd_state *s))
strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename)); strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename));
} }
httpd_log_file(uip_conn->ripaddr, s->filename); httpd_log_file(&uip_conn->ripaddr, s->filename);
s->state = STATE_OUTPUT; s->state = STATE_OUTPUT;

View file

@ -28,7 +28,7 @@
* *
* This file is part of the uIP TCP/IP stack. * This file is part of the uIP TCP/IP stack.
* *
* $Id: httpd.h,v 1.1 2006/06/17 22:41:14 adamdunkels Exp $ * $Id: httpd.h,v 1.2 2006/08/09 16:13:39 bg- Exp $
* *
*/ */
@ -59,6 +59,6 @@ void httpd_init(void);
void httpd_appcall(void *state); void httpd_appcall(void *state);
void httpd_log(char *msg); void httpd_log(char *msg);
void httpd_log_file(u16_t *requester, char *file); void httpd_log_file(uip_ipaddr_t *requester, char *file);
#endif /* __HTTPD_H__ */ #endif /* __HTTPD_H__ */

View file

@ -29,7 +29,7 @@
* *
* This file is part of the Contiki OS. * This file is part of the Contiki OS.
* *
* $Id: webserver-nogui.c,v 1.1 2006/06/17 22:41:15 adamdunkels Exp $ * $Id: webserver-nogui.c,v 1.2 2006/08/09 16:13:39 bg- Exp $
* *
*/ */
@ -59,7 +59,7 @@ PROCESS_THREAD(webserver_nogui_process, ev, data)
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void void
httpd_log_file(u16_t *requester, char *file) httpd_log_file(uip_ipaddr_t *requester, char *file)
{ {
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/

View file

@ -29,7 +29,7 @@
* *
* This file is part of the Contiki desktop environment for the C64. * This file is part of the Contiki desktop environment for the C64.
* *
* $Id: webserver.c,v 1.1 2006/06/17 22:41:15 adamdunkels Exp $ * $Id: webserver.c,v 1.2 2006/08/09 16:13:39 bg- Exp $
* *
*/ */
@ -89,7 +89,7 @@ PROCESS_THREAD(webserver_process, ev, data)
} }
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
void void
httpd_log_file(u16_t *requester, char *file) httpd_log_file(uip_ipaddr_t *requester, char *file)
{ {
int size; int size;
@ -99,10 +99,10 @@ httpd_log_file(u16_t *requester, char *file)
/* Print out IP address of requesting host. */ /* Print out IP address of requesting host. */
size = sprintf(&log[LOG_WIDTH * (LOG_HEIGHT - 1)], size = sprintf(&log[LOG_WIDTH * (LOG_HEIGHT - 1)],
"%d.%d.%d.%d: ", "%d.%d.%d.%d: ",
htons(requester[0]) >> 8, requester->u8[0],
htons(requester[0]) & 0xff, requester->u8[1],
htons(requester[1]) >> 8, requester->u8[2],
htons(requester[1]) & 0xff); requester->u8[3]);
/* Copy filename into last line. */ /* Copy filename into last line. */
strncpy(&log[LOG_WIDTH * (LOG_HEIGHT - 1) + size], file, LOG_WIDTH - size); strncpy(&log[LOG_WIDTH * (LOG_HEIGHT - 1) + size], file, LOG_WIDTH - size);

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* @(#)$Id: cc2420.c,v 1.2 2006/08/02 14:33:36 bg- Exp $ * @(#)$Id: cc2420.c,v 1.3 2006/08/09 16:13:39 bg- Exp $
*/ */
/* /*
* This code is almost device independent and should be possible to * This code is almost device independent and should be possible to
@ -209,7 +209,7 @@ cc2420_send_data_ack(u16_t mac)
h.fc0 = FC0_TYPE_DATA | FC0_INTRA_PAN; h.fc0 = FC0_TYPE_DATA | FC0_INTRA_PAN;
h.fc1 = FC1_DST_16 | FC1_SRC_16; h.fc1 = FC1_DST_16 | FC1_SRC_16;
h.src = uip_hostaddr[1]; h.src = uip_hostaddr.u16[1];
h.dst = mac; h.dst = mac;
cc2420_send(&h, 10, NULL, 0); cc2420_send(&h, 10, NULL, 0);
@ -491,8 +491,7 @@ PROCESS_THREAD(cc2420_process, ev, data)
* If we are the unique receiver send DATA ACK. * If we are the unique receiver send DATA ACK.
*/ */
if (h.dst == 0xffff if (h.dst == 0xffff
&& BUF->destipaddr[0] == uip_hostaddr[0] && uip_ipaddr_cmp(&BUF->destipaddr, &uip_hostaddr))
&& BUF->destipaddr[1] == uip_hostaddr[1])
cc2420_send_data_ack(h.src); cc2420_send_data_ack(h.src);
leds_toggle(LEDS_GREEN); leds_toggle(LEDS_GREEN);
tcpip_input(); tcpip_input();
@ -630,7 +629,7 @@ neigbour_update(u16_t mac, int nretrans)
void void
cc2420_recv_ok(uip_ipaddr_t *from) cc2420_recv_ok(uip_ipaddr_t *from)
{ {
neigbour_update((*from)[1], 0); neigbour_update(from->u16[1], 0);
} }
/* /*

View file

@ -11,8 +11,8 @@
#include "dev/cc2420.h" #include "dev/cc2420.h"
#define in_my_network(a) \ #define in_my_network(a) \
(((a[0] ^ cc2420if.ipaddr[0]) & cc2420if.netmask[0]) == 0 && \ (((a[0] ^ cc2420if.ipaddr.u16[0]) & cc2420if.netmask.u16[0]) == 0 && \
((a[1] ^ cc2420if.ipaddr[1]) & cc2420if.netmask[1]) == 0) ((a[1] ^ cc2420if.ipaddr.u16[1]) & cc2420if.netmask.u16[1]) == 0)
u8_t u8_t
cc2420_send_ip(void) cc2420_send_ip(void)
@ -26,21 +26,21 @@ cc2420_send_ip(void)
h.fc0 = FC0_TYPE_DATA | FC0_REQ_ACK | FC0_INTRA_PAN; h.fc0 = FC0_TYPE_DATA | FC0_REQ_ACK | FC0_INTRA_PAN;
h.fc1 = FC1_DST_16 | FC1_SRC_16; h.fc1 = FC1_DST_16 | FC1_SRC_16;
h.src = uip_hostaddr[1]; h.src = uip_hostaddr.u16[1];
if (BUF->destipaddr[0] == 0xffff && BUF->destipaddr[1] == 0xffff) if (uip_ipaddr_cmp(&BUF->destipaddr, &uip_broadcast_addr))
h.dst = 0xffff; h.dst = 0xffff;
else { else {
uip_ipaddr_t *next_gw; uip_ipaddr_t *next_gw;
if (in_my_network(BUF->destipaddr)) if (in_my_network(BUF->destipaddr.u16))
next_gw = &BUF->destipaddr; next_gw = &BUF->destipaddr;
else else
next_gw = &uip_draddr; /* Default router. */ next_gw = &uip_draddr; /* Default router. */
if (cc2420_check_remote((*next_gw)[1]) == 1) if (cc2420_check_remote(next_gw->u16[1]) == 1)
h.dst = 0xffff; /* remote, use bcast */ h.dst = 0xffff; /* remote, use bcast */
else else
h.dst = (*next_gw)[1]; /* local or unknown, use ucast */ h.dst = next_gw->u16[1]; /* local or unknown, use ucast */
} }
/* Don't request MAC level ACKs for broadcast packets. */ /* Don't request MAC level ACKs for broadcast packets. */

View file

@ -14,8 +14,8 @@
#include "net/uaodv-rt.h" #include "net/uaodv-rt.h"
#define in_my_network(a) \ #define in_my_network(a) \
(((a[0] ^ cc2420if.ipaddr[0]) & cc2420if.netmask[0]) == 0 && \ (((a[0] ^ cc2420if.ipaddr.u16[0]) & cc2420if.netmask.u16[0]) == 0 && \
((a[1] ^ cc2420if.ipaddr[1]) & cc2420if.netmask[1]) == 0) ((a[1] ^ cc2420if.ipaddr.u16[1]) & cc2420if.netmask.u16[1]) == 0)
u8_t u8_t
cc2420_send_uaodv(void) cc2420_send_uaodv(void)
@ -29,27 +29,27 @@ cc2420_send_uaodv(void)
h.fc0 = FC0_TYPE_DATA | FC0_REQ_ACK | FC0_INTRA_PAN; h.fc0 = FC0_TYPE_DATA | FC0_REQ_ACK | FC0_INTRA_PAN;
h.fc1 = FC1_DST_16 | FC1_SRC_16; h.fc1 = FC1_DST_16 | FC1_SRC_16;
h.src = uip_hostaddr[1]; h.src = uip_hostaddr.u16[1];
if (BUF->destipaddr[0] == 0xffff && BUF->destipaddr[1] == 0xffff) if (uip_ipaddr_cmp(&BUF->destipaddr, &uip_broadcast_addr))
h.dst = 0xffff; h.dst = 0xffff;
else { else {
uip_ipaddr_t *next_gw; uip_ipaddr_t *next_gw;
if (in_my_network(BUF->destipaddr)) if (in_my_network(BUF->destipaddr.u16))
next_gw = &BUF->destipaddr; next_gw = &BUF->destipaddr;
else else
next_gw = &uip_draddr; /* Default router. */ next_gw = &uip_draddr; /* Default router. */
if (cc2420_check_remote((*next_gw)[1]) == 0) if (cc2420_check_remote(next_gw->u16[1]) == 0)
h.dst = (*next_gw)[1]; /* local, use ucast */ h.dst = next_gw->u16[1]; /* local, use ucast */
else { /* remote or unknown */ else { /* remote or unknown */
struct uaodv_rt_entry *route = uaodv_request_route_to(next_gw); struct uaodv_rt_entry *route = uaodv_request_route_to(next_gw);
if (route == NULL) { if (route == NULL) {
h.dst = (*next_gw)[1]; /* try local while waiting for route */ h.dst = next_gw->u16[1]; /* try local while waiting for route */
} else { } else {
if (cc2420_check_remote(route->nexthop[1]) == 1) { if (cc2420_check_remote(route->nexthop.u16[1]) == 1) {
printf("LOST 0x%04x\n", route->nexthop[1]); printf("LOST 0x%04x\n", route->nexthop.u16[1]);
/* Send bad route notification? */ /* Send bad route notification? */
#ifdef UAODV_BAD_ROUTE #ifdef UAODV_BAD_ROUTE
uaodv_bad_route(route); uaodv_bad_route(route);
@ -58,7 +58,7 @@ cc2420_send_uaodv(void)
h.dst = 0xffff; /* revert to bcast */ h.dst = 0xffff; /* revert to bcast */
} else /* unknown */ { } else /* unknown */ {
/* This will implicitly update neigbour table. */ /* This will implicitly update neigbour table. */
h.dst = route->nexthop[1]; h.dst = route->nexthop.u16[1];
} }
} }
} }

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* @(#)$Id: dhcpc.c,v 1.2 2006/06/24 17:59:28 gpz Exp $ * @(#)$Id: dhcpc.c,v 1.3 2006/08/09 16:13:39 bg- Exp $
*/ */
#include <stdio.h> #include <stdio.h>
@ -116,7 +116,7 @@ add_req_ipaddr(u8_t *optptr)
{ {
*optptr++ = DHCP_OPTION_REQ_IPADDR; *optptr++ = DHCP_OPTION_REQ_IPADDR;
*optptr++ = 4; *optptr++ = 4;
memcpy(optptr, s.ipaddr, 4); memcpy(optptr, s.ipaddr.u16, 4);
return optptr + 4; return optptr + 4;
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
@ -149,7 +149,7 @@ create_msg(register struct dhcp_msg *m)
m->secs = 0; m->secs = 0;
m->flags = HTONS(BOOTP_BROADCAST); /* Broadcast bit. */ m->flags = HTONS(BOOTP_BROADCAST); /* Broadcast bit. */
/* uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/ /* uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/
memcpy(m->ciaddr, uip_hostaddr, sizeof(m->ciaddr)); memcpy(m->ciaddr, uip_hostaddr.u16, sizeof(m->ciaddr));
memset(m->yiaddr, 0, sizeof(m->yiaddr)); memset(m->yiaddr, 0, sizeof(m->yiaddr));
memset(m->siaddr, 0, sizeof(m->siaddr)); memset(m->siaddr, 0, sizeof(m->siaddr));
memset(m->giaddr, 0, sizeof(m->giaddr)); memset(m->giaddr, 0, sizeof(m->giaddr));
@ -203,13 +203,13 @@ parse_options(u8_t *optptr, int len)
while(optptr < end) { while(optptr < end) {
switch(*optptr) { switch(*optptr) {
case DHCP_OPTION_SUBNET_MASK: case DHCP_OPTION_SUBNET_MASK:
memcpy(s.netmask, optptr + 2, 4); memcpy(s.netmask.u16, optptr + 2, 4);
break; break;
case DHCP_OPTION_ROUTER: case DHCP_OPTION_ROUTER:
memcpy(s.default_router, optptr + 2, 4); memcpy(s.default_router.u16, optptr + 2, 4);
break; break;
case DHCP_OPTION_DNS_SERVER: case DHCP_OPTION_DNS_SERVER:
memcpy(s.dnsaddr, optptr + 2, 4); memcpy(s.dnsaddr.u16, optptr + 2, 4);
break; break;
case DHCP_OPTION_MSG_TYPE: case DHCP_OPTION_MSG_TYPE:
type = *(optptr + 2); type = *(optptr + 2);
@ -237,7 +237,7 @@ parse_msg(void)
if(m->op == DHCP_REPLY && if(m->op == DHCP_REPLY &&
memcmp(m->xid, &xid, sizeof(xid)) == 0 && memcmp(m->xid, &xid, sizeof(xid)) == 0 &&
memcmp(m->chaddr, s.mac_addr, s.mac_len) == 0) { memcmp(m->chaddr, s.mac_addr, s.mac_len) == 0) {
memcpy(s.ipaddr, m->yiaddr, 4); memcpy(s.ipaddr.u16, m->yiaddr, 4);
return parse_options(&m->options[4], uip_datalen()); return parse_options(&m->options[4], uip_datalen());
} }
return 0; return 0;
@ -385,14 +385,14 @@ PT_THREAD(handle_dhcp(process_event_t ev, void *data))
void void
dhcpc_init(const void *mac_addr, int mac_len) dhcpc_init(const void *mac_addr, int mac_len)
{ {
u16_t addr[2]; uip_ipaddr_t addr;
s.mac_addr = mac_addr; s.mac_addr = mac_addr;
s.mac_len = mac_len; s.mac_len = mac_len;
s.state = STATE_INITIAL; s.state = STATE_INITIAL;
uip_ipaddr(addr, 255,255,255,255); uip_ipaddr(&addr, 255,255,255,255);
s.conn = udp_new(addr, HTONS(DHCPC_SERVER_PORT), NULL); s.conn = udp_new(&addr, HTONS(DHCPC_SERVER_PORT), NULL);
if(s.conn != NULL) { if(s.conn != NULL) {
udp_bind(s.conn, HTONS(DHCPC_CLIENT_PORT)); udp_bind(s.conn, HTONS(DHCPC_CLIENT_PORT));
} }
@ -410,11 +410,11 @@ dhcpc_appcall(process_event_t ev, void *data)
void void
dhcpc_request(void) dhcpc_request(void)
{ {
u16_t ipaddr[2]; uip_ipaddr_t ipaddr;
if(s.state == STATE_INITIAL) { if(s.state == STATE_INITIAL) {
uip_ipaddr(ipaddr, 0,0,0,0); uip_ipaddr(&ipaddr, 0,0,0,0);
uip_sethostaddr(ipaddr); uip_sethostaddr(&ipaddr);
handle_dhcp(PROCESS_EVENT_NONE, NULL); handle_dhcp(PROCESS_EVENT_NONE, NULL);
} }
} }

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* @(#)$Id: dhcpc.h,v 1.1 2006/06/17 22:41:18 adamdunkels Exp $ * @(#)$Id: dhcpc.h,v 1.2 2006/08/09 16:13:39 bg- Exp $
*/ */
#ifndef __DHCPC_H__ #ifndef __DHCPC_H__
#define __DHCPC_H__ #define __DHCPC_H__
@ -45,10 +45,10 @@ struct dhcpc_state {
u8_t serverid[4]; u8_t serverid[4];
u16_t lease_time[2]; u16_t lease_time[2];
u16_t ipaddr[2]; uip_ipaddr_t ipaddr;
u16_t netmask[2]; uip_ipaddr_t netmask;
u16_t dnsaddr[2]; uip_ipaddr_t dnsaddr;
u16_t default_router[2]; uip_ipaddr_t default_router;
}; };
void dhcpc_init(const void *mac_addr, int mac_len); void dhcpc_init(const void *mac_addr, int mac_len);

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* @(#)$Id: hc.c,v 1.1 2006/06/17 22:41:18 adamdunkels Exp $ * @(#)$Id: hc.c,v 1.2 2006/08/09 16:13:39 bg- Exp $
*/ */
/** /**
@ -49,7 +49,7 @@
struct hc_hdr { struct hc_hdr {
u16_t flagsport; u16_t flagsport;
u16_t srcipaddr[2]; uip_ipaddr_t srcipaddr;
}; };
struct udpip_hdr { struct udpip_hdr {
@ -62,8 +62,7 @@ struct udpip_hdr {
ttl, ttl,
proto; proto;
u16_t ipchksum; u16_t ipchksum;
u16_t srcipaddr[2], uip_ipaddr_t srcipaddr, destipaddr;
destipaddr[2];
/* UDP header. */ /* UDP header. */
u16_t srcport, u16_t srcport,
@ -121,11 +120,8 @@ hc_compress(void)
uhdr->ipoffset[1] == 0x00 && /* No fragmented IP uhdr->ipoffset[1] == 0x00 && /* No fragmented IP
packets. */ packets. */
uhdr->proto == UIP_PROTO_UDP && /* Only UDP packets. */ uhdr->proto == UIP_PROTO_UDP && /* Only UDP packets. */
uhdr->destipaddr[0] == 0xffffU && /* Only link-local uip_ipaddr_cmp(&uhdr->destipaddr, &uip_broadcast_addr) && /* Only
broadcast link-local broadcast
packets. */
uhdr->destipaddr[1] == 0xffffU && /* Only link-local
broadcast
packets. */ packets. */
uhdr->destport == uhdr->srcport && /* Only packets with uhdr->destport == uhdr->srcport && /* Only packets with
the same destination the same destination
@ -184,8 +180,7 @@ hc_inflate(void)
hdr = (struct hc_hdr *)&uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN - hdr = (struct hc_hdr *)&uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN -
HC_HLEN]; HC_HLEN];
uhdr->srcipaddr[0] = hdr->srcipaddr[0]; uhdr->srcipaddr = hdr->srcipaddr;
uhdr->srcipaddr[1] = hdr->srcipaddr[1];
uhdr->srcport = hdr->flagsport & HTONS(0x3fff); uhdr->srcport = hdr->flagsport & HTONS(0x3fff);
uhdr->destport = hdr->flagsport & HTONS(0x3fff); uhdr->destport = hdr->flagsport & HTONS(0x3fff);
@ -202,7 +197,7 @@ hc_inflate(void)
uhdr->ipoffset[0] = uhdr->ipoffset[1] = 0; uhdr->ipoffset[0] = uhdr->ipoffset[1] = 0;
uhdr->ttl = 2; uhdr->ttl = 2;
uhdr->proto = UIP_PROTO_UDP; uhdr->proto = UIP_PROTO_UDP;
uhdr->destipaddr[0] = uhdr->destipaddr[1] = 0xffff; uhdr->destipaddr = uip_broadcast_addr;
uhdr->udpchksum = 0; uhdr->udpchksum = 0;
uhdr->ipchksum = 0; uhdr->ipchksum = 0;

View file

@ -57,7 +57,7 @@
* *
* This file is part of the uIP TCP/IP stack. * This file is part of the uIP TCP/IP stack.
* *
* $Id: resolv.c,v 1.1 2006/06/17 22:41:18 adamdunkels Exp $ * $Id: resolv.c,v 1.2 2006/08/09 16:13:39 bg- Exp $
* *
*/ */
@ -356,7 +356,7 @@ PROCESS_THREAD(resolv_process, ev, data)
uip_udp_remove(resolv_conn); uip_udp_remove(resolv_conn);
} }
resolv_conn = udp_new((u16_t *)data, HTONS(53), NULL); resolv_conn = udp_new((uip_ipaddr_t *)data, HTONS(53), NULL);
} else if(ev == tcpip_event) { } else if(ev == tcpip_event) {
if(uip_udp_conn->rport == HTONS(53)) { if(uip_udp_conn->rport == HTONS(53)) {
@ -459,7 +459,7 @@ resolv_getserver(void)
if(resolv_conn == NULL) { if(resolv_conn == NULL) {
return NULL; return NULL;
} }
return resolv_conn->ripaddr; return resolv_conn->ripaddr.u16;
} }
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/** /**

View file

@ -30,7 +30,7 @@
* *
* Author: Adam Dunkels <adam@sics.se> * Author: Adam Dunkels <adam@sics.se>
* *
* $Id: tcpip.c,v 1.2 2006/07/07 06:45:45 nifi Exp $ * $Id: tcpip.c,v 1.3 2006/08/09 16:13:39 bg- Exp $
*/ */
#include "contiki-conf.h" #include "contiki-conf.h"
@ -188,12 +188,12 @@ udp_attach(struct uip_udp_conn *conn,
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
struct uip_udp_conn * struct uip_udp_conn *
udp_new(u16_t *ripaddr, u16_t port, void *appstate) udp_new(uip_ipaddr_t *ripaddr, u16_t port, void *appstate)
{ {
struct uip_udp_conn *c; struct uip_udp_conn *c;
uip_udp_appstate_t *s; uip_udp_appstate_t *s;
c = uip_udp_new((uip_ipaddr_t *)ripaddr, port); c = uip_udp_new(ripaddr, port);
if(c == NULL) { if(c == NULL) {
return NULL; return NULL;
} }
@ -211,8 +211,8 @@ udp_broadcast_new(u16_t port, void *appstate)
uip_ipaddr_t addr; uip_ipaddr_t addr;
struct uip_udp_conn *conn; struct uip_udp_conn *conn;
uip_ipaddr(addr, 255,255,255,255); uip_ipaddr(&addr, 255,255,255,255);
conn = udp_new(addr, port, appstate); conn = udp_new(&addr, port, appstate);
if(conn != NULL) { if(conn != NULL) {
udp_bind(conn, port); udp_bind(conn, port);
} }

View file

@ -60,7 +60,7 @@
* *
* Author: Adam Dunkels <adam@sics.se> * Author: Adam Dunkels <adam@sics.se>
* *
* $Id: tcpip.h,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: tcpip.h,v 1.2 2006/08/09 16:13:39 bg- Exp $
*/ */
#ifndef __TCPIP_H__ #ifndef __TCPIP_H__
#define __TCPIP_H__ #define __TCPIP_H__
@ -223,7 +223,7 @@ void udp_attach(struct uip_udp_conn *conn,
* \return A pointer to the newly created connection, or NULL if * \return A pointer to the newly created connection, or NULL if
* memory could not be allocated for the connection. * memory could not be allocated for the connection.
*/ */
struct uip_udp_conn *udp_new(u16_t *ripaddr, u16_t port, struct uip_udp_conn *udp_new(uip_ipaddr_t *ripaddr, u16_t port,
void *appstate); void *appstate);
/** /**

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* $Id: uaodv-rt.c,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uaodv-rt.c,v 1.2 2006/08/09 16:13:39 bg- Exp $
*/ */
/** /**
@ -76,8 +76,8 @@ uaodv_rt_add(uip_ipaddr_t *dest, uip_ipaddr_t *nexthop,
} }
} }
uip_ipaddr_copy(e->dest, dest); uip_ipaddr_copy(&e->dest, dest);
uip_ipaddr_copy(e->nexthop, nexthop); uip_ipaddr_copy(&e->nexthop, nexthop);
e->hop_count = hop_count; e->hop_count = hop_count;
e->seqno = seqno; e->seqno = seqno;

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* $Id: uaodv.c,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uaodv.c,v 1.2 2006/08/09 16:13:39 bg- Exp $
*/ */
/** /**
@ -82,13 +82,11 @@ print_debug(const char *fmt, ...)
} }
#endif #endif
#define uip_udp_sender() ((uip_ipaddr_t *)(((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])->srcipaddr)) #define uip_udp_sender() (&((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])->srcipaddr)
uip_ipaddr_t inaddr_broadcast = { 0xffff, 0xffff };
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
static void static void
sendto(uip_ipaddr_t *dest, char *buf, int len) sendto(const uip_ipaddr_t *dest, char *buf, int len)
{ {
/* XXX: this is a HACK! We're updating the uIP UDP connection /* XXX: this is a HACK! We're updating the uIP UDP connection
"unicastconn" so that the destination address is the next-hop, "unicastconn" so that the destination address is the next-hop,
@ -162,7 +160,7 @@ send_rerr(uip_ipaddr_t *addr, u32_t seqno)
uip_ipaddr_copy(&rm->unreach[0].addr, addr); uip_ipaddr_copy(&rm->unreach[0].addr, addr);
rm->unreach[0].seqno = seqno; rm->unreach[0].seqno = seqno;
sendto(&inaddr_broadcast, (char *)rm, sizeof(struct uaodv_msg_rerr)); sendto(&uip_broadcast_addr, (char *)rm, sizeof(struct uaodv_msg_rerr));
print_debug("Broadcasting initial RERR for %d.%d.%d.%d\n", ip2quad(addr)); print_debug("Broadcasting initial RERR for %d.%d.%d.%d\n", ip2quad(addr));
} }
@ -189,7 +187,7 @@ handle_incoming_rreq(void)
#endif #endif
/* Check if it is for our address. */ /* Check if it is for our address. */
if(uip_ipaddr_cmp(&rm->dest_addr, uip_hostaddr)) { if(uip_ipaddr_cmp(&rm->dest_addr, &uip_hostaddr)) {
print_debug("RREQ for our address!\n"); print_debug("RREQ for our address!\n");
rt = uaodv_rt_lookup(&rm->src_addr); rt = uaodv_rt_lookup(&rm->src_addr);
if(rt == NULL || rm->hop_count <= rt->hop_count) { if(rt == NULL || rm->hop_count <= rt->hop_count) {
@ -317,7 +315,7 @@ handle_incoming_rrep(void)
); );
} }
if(uip_ipaddr_cmp(&rm->src_addr, uip_hostaddr)) { if(uip_ipaddr_cmp(&rm->src_addr, &uip_hostaddr)) {
print_debug("------- COMPLETE ROUTE FOUND\n"); print_debug("------- COMPLETE ROUTE FOUND\n");
} else { } else {
@ -365,7 +363,7 @@ handle_incoming_rerr(void)
if(rt != NULL && uip_ipaddr_cmp(&rt->nexthop, uip_udp_sender())) { if(rt != NULL && uip_ipaddr_cmp(&rt->nexthop, uip_udp_sender())) {
uaodv_rt_remove(rt); uaodv_rt_remove(rt);
print_debug("RERR rebroadcast\n"); print_debug("RERR rebroadcast\n");
sendto(&inaddr_broadcast, (char *)rm, sizeof(struct uaodv_msg_rerr)); sendto(&uip_broadcast_addr, (char *)rm, sizeof(struct uaodv_msg_rerr));
} }
} }
#endif #endif

View file

@ -30,7 +30,7 @@
* *
* Author: Adam Dunkels <adam@sics.se> * Author: Adam Dunkels <adam@sics.se>
* *
* $Id: uip-fw.c,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uip-fw.c,v 1.2 2006/08/09 16:13:39 bg- Exp $
*/ */
/** /**
* \addtogroup uip * \addtogroup uip
@ -80,8 +80,7 @@ struct tcpip_hdr {
u8_t ttl, u8_t ttl,
proto; proto;
u16_t ipchksum; u16_t ipchksum;
u16_t srcipaddr[2], uip_ipaddr_t srcipaddr, destipaddr;
destipaddr[2];
/* TCP header. */ /* TCP header. */
u16_t srcport, u16_t srcport,
@ -106,8 +105,7 @@ struct icmpip_hdr {
ttl, ttl,
proto; proto;
u16_t ipchksum; u16_t ipchksum;
u16_t srcipaddr[2], uip_ipaddr_t srcipaddr, destipaddr;
destipaddr[2];
/* ICMP (echo) header. */ /* ICMP (echo) header. */
u8_t type, icode; u8_t type, icode;
u16_t icmpchksum; u16_t icmpchksum;
@ -138,8 +136,8 @@ struct icmpip_hdr {
struct fwcache_entry { struct fwcache_entry {
u16_t timer; u16_t timer;
u16_t srcipaddr[2]; uip_ipaddr_t srcipaddr;
u16_t destipaddr[2]; uip_ipaddr_t destipaddr;
u16_t ipid; u16_t ipid;
u8_t proto; u8_t proto;
u8_t unused; u8_t unused;
@ -205,10 +203,12 @@ uip_fw_init(void)
*/ */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
static unsigned char static unsigned char
ipaddr_maskcmp(u16_t *ipaddr, u16_t *netipaddr, u16_t *netmask) ipaddr_maskcmp(uip_ipaddr_t *ipaddr,
uip_ipaddr_t *netipaddr,
uip_ipaddr_t *netmask)
{ {
return (ipaddr[0] & netmask [0]) == (netipaddr[0] & netmask[0]) && return (ipaddr->u16[0] & netmask->u16[0]) == (netipaddr->u16[0] & netmask->u16[0]) &&
(ipaddr[1] & netmask[1]) == (netipaddr[1] & netmask[1]); (ipaddr->u16[1] & netmask->u16[1]) == (netipaddr->u16[1] & netmask->u16[1]);
} }
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/** /**
@ -222,7 +222,7 @@ ipaddr_maskcmp(u16_t *ipaddr, u16_t *netipaddr, u16_t *netmask)
static void static void
time_exceeded(void) time_exceeded(void)
{ {
u16_t tmp16; uip_ipaddr_t tmpip;
/* We don't send out ICMP errors for ICMP messages. */ /* We don't send out ICMP errors for ICMP messages. */
if(ICMPBUF->proto == UIP_PROTO_ICMP) { if(ICMPBUF->proto == UIP_PROTO_ICMP) {
@ -242,16 +242,15 @@ time_exceeded(void)
/* Set the IP destination address to be the source address of the /* Set the IP destination address to be the source address of the
original packet. */ original packet. */
tmp16= BUF->destipaddr[0]; tmpip = BUF->destipaddr;
BUF->destipaddr[0] = BUF->srcipaddr[0]; BUF->destipaddr = BUF->srcipaddr;
BUF->srcipaddr[0] = tmp16; BUF->srcipaddr = tmpip;
tmp16 = BUF->destipaddr[1]; tmpip = BUF->destipaddr;
BUF->destipaddr[1] = BUF->srcipaddr[1]; BUF->destipaddr = BUF->srcipaddr;
BUF->srcipaddr[1] = tmp16; BUF->srcipaddr = tmpip;
/* Set our IP address as the source address. */ /* Set our IP address as the source address. */
BUF->srcipaddr[0] = uip_hostaddr[0]; BUF->srcipaddr = uip_hostaddr;
BUF->srcipaddr[1] = uip_hostaddr[1];
/* The size of the ICMP time exceeded packet is 36 + the size of the /* The size of the ICMP time exceeded packet is 36 + the size of the
IP header (20) = 56. */ IP header (20) = 56. */
@ -301,10 +300,8 @@ fwcache_register(void)
fw->timer = FW_TIME; fw->timer = FW_TIME;
fw->ipid = BUF->ipid; fw->ipid = BUF->ipid;
fw->srcipaddr[0] = BUF->srcipaddr[0]; fw->srcipaddr = BUF->srcipaddr;
fw->srcipaddr[1] = BUF->srcipaddr[1]; fw->destipaddr = BUF->destipaddr;
fw->destipaddr[0] = BUF->destipaddr[0];
fw->destipaddr[1] = BUF->destipaddr[1];
fw->proto = BUF->proto; fw->proto = BUF->proto;
#if notdef #if notdef
fw->payload[0] = BUF->srcport; fw->payload[0] = BUF->srcport;
@ -328,8 +325,8 @@ find_netif(void)
/* Walk through every network interface to check for a match. */ /* Walk through every network interface to check for a match. */
for(netif = netifs; netif != NULL; netif = netif->next) { for(netif = netifs; netif != NULL; netif = netif->next) {
if(ipaddr_maskcmp(BUF->destipaddr, netif->ipaddr, if(ipaddr_maskcmp(&BUF->destipaddr, &netif->ipaddr,
netif->netmask)) { &netif->netmask)) {
/* If there was a match, we break the loop. */ /* If there was a match, we break the loop. */
return netif; return netif;
} }
@ -369,8 +366,7 @@ uip_fw_output(void)
#if UIP_BROADCAST #if UIP_BROADCAST
/* Link local broadcasts go out on all interfaces. */ /* Link local broadcasts go out on all interfaces. */
if(/*BUF->proto == UIP_PROTO_UDP &&*/ if(/*BUF->proto == UIP_PROTO_UDP &&*/
BUF->destipaddr[0] == 0xffff && uip_ipaddr_cmp(&BUF->destipaddr, &uip_broadcast_addr)) {
BUF->destipaddr[1] == 0xffff) {
if(defaultnetif != NULL) { if(defaultnetif != NULL) {
defaultnetif->output(); defaultnetif->output();
} }
@ -410,15 +406,14 @@ uip_fw_forward(void)
/* First check if the packet is destined for ourselves and return 0 /* First check if the packet is destined for ourselves and return 0
to indicate that the packet should be processed locally. */ to indicate that the packet should be processed locally. */
if(BUF->destipaddr[0] == uip_hostaddr[0] && if(uip_ipaddr_cmp(&BUF->destipaddr, &uip_hostaddr)) {
BUF->destipaddr[1] == uip_hostaddr[1]) {
return UIP_FW_LOCAL; return UIP_FW_LOCAL;
} }
/* If we use ping IP address configuration, and our IP address is /* If we use ping IP address configuration, and our IP address is
not yet configured, we should intercept all ICMP echo packets. */ not yet configured, we should intercept all ICMP echo packets. */
#if UIP_PINGADDRCONF #if UIP_PINGADDRCONF
if((uip_hostaddr[0] | uip_hostaddr[1]) == 0 && if(uip_ipaddr_cmp(&uip_hostaddr, &all_zeroes_addr) &&
BUF->proto == UIP_PROTO_ICMP && BUF->proto == UIP_PROTO_ICMP &&
ICMPBUF->type == ICMP_ECHO) { ICMPBUF->type == ICMP_ECHO) {
return UIP_FW_LOCAL; return UIP_FW_LOCAL;
@ -435,10 +430,8 @@ uip_fw_forward(void)
fw->offset == BUF->ipoffset && fw->offset == BUF->ipoffset &&
#endif #endif
fw->ipid == BUF->ipid && fw->ipid == BUF->ipid &&
fw->srcipaddr[0] == BUF->srcipaddr[0] && uip_ipaddr_cmp(&fw->srcipaddr, &BUF->srcipaddr) &&
fw->srcipaddr[1] == BUF->srcipaddr[1] && uip_ipaddr_cmp(&fw->destipaddr, &BUF->destipaddr) &&
fw->destipaddr[0] == BUF->destipaddr[0] &&
fw->destipaddr[1] == BUF->destipaddr[1] &&
#if notdef #if notdef
fw->payload[0] == BUF->srcport && fw->payload[0] == BUF->srcport &&
fw->payload[1] == BUF->destport && fw->payload[1] == BUF->destport &&
@ -454,7 +447,7 @@ uip_fw_forward(void)
of the packet. */ of the packet. */
if(BUF->ttl <= 1) { if(BUF->ttl <= 1) {
/* No time exceeded for broadcasts and multicasts! */ /* No time exceeded for broadcasts and multicasts! */
if(BUF->destipaddr[0] == 0xffff && BUF->destipaddr[1] == 0xffff) { if(uip_ipaddr_cmp(&BUF->destipaddr, &uip_broadcast_addr)) {
return UIP_FW_LOCAL; return UIP_FW_LOCAL;
} }
time_exceeded(); time_exceeded();
@ -476,7 +469,7 @@ uip_fw_forward(void)
} }
#if UIP_BROADCAST #if UIP_BROADCAST
if(BUF->destipaddr[0] == 0xffff && BUF->destipaddr[1] == 0xffff) { if(uip_ipaddr_cmp(&BUF->destipaddr, &uip_broadcast_addr)) {
return UIP_FW_LOCAL; return UIP_FW_LOCAL;
} }
#endif /* UIP_BROADCAST */ #endif /* UIP_BROADCAST */

View file

@ -41,7 +41,7 @@
* *
* Author: Adam Dunkels <adam@sics.se> * Author: Adam Dunkels <adam@sics.se>
* *
* $Id: uip-fw.h,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uip-fw.h,v 1.2 2006/08/09 16:13:40 bg- Exp $
*/ */
#ifndef __UIP_FW_H__ #ifndef __UIP_FW_H__
#define __UIP_FW_H__ #define __UIP_FW_H__
@ -54,8 +54,8 @@
struct uip_fw_netif { struct uip_fw_netif {
struct uip_fw_netif *next; /**< Pointer to the next interface when struct uip_fw_netif *next; /**< Pointer to the next interface when
linked in a list. */ linked in a list. */
u16_t ipaddr[2]; /**< The IP address of this interface. */ uip_ipaddr_t ipaddr; /**< The IP address of this interface. */
u16_t netmask[2]; /**< The netmask of the interface. */ uip_ipaddr_t netmask; /**< The netmask of the interface. */
u8_t (* output)(void); u8_t (* output)(void);
/**< A pointer to the function that /**< A pointer to the function that
sends a packet. */ sends a packet. */
@ -79,8 +79,8 @@ struct uip_fw_netif {
*/ */
#define UIP_FW_NETIF(ip1,ip2,ip3,ip4, nm1,nm2,nm3,nm4, outputfunc) \ #define UIP_FW_NETIF(ip1,ip2,ip3,ip4, nm1,nm2,nm3,nm4, outputfunc) \
NULL, \ NULL, \
{HTONS((ip1 << 8) | ip2), HTONS((ip3 << 8) | ip4)}, \ { .u16 = {HTONS((ip1 << 8) | ip2), HTONS((ip3 << 8) | ip4)} }, \
{HTONS((nm1 << 8) | nm2), HTONS((nm3 << 8) | nm4)}, \ { .u16 = {HTONS((nm1 << 8) | nm2), HTONS((nm3 << 8) | nm4)} }, \
outputfunc outputfunc
/** /**

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* $Id: uip-neighbor.c,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uip-neighbor.c,v 1.2 2006/08/09 16:13:40 bg- Exp $
*/ */
/** /**
@ -42,6 +42,7 @@
#include "net/uip-neighbor.h" #include "net/uip-neighbor.h"
#include <string.h> #include <string.h>
#include <stdio.h>
#define MAX_TIME 128 #define MAX_TIME 128
@ -82,7 +83,7 @@ uip_neighbor_periodic(void)
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void void
uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr) uip_neighbor_add(uip_ipaddr_t *ipaddr, struct uip_neighbor_addr *addr)
{ {
int i, oldest; int i, oldest;
u8_t oldest_time; u8_t oldest_time;
@ -99,7 +100,7 @@ uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
oldest = i; oldest = i;
break; break;
} }
if(uip_ipaddr_cmp(entries[i].ipaddr, addr)) { if(uip_ipaddr_cmp(&entries[i].ipaddr, ipaddr)) {
oldest = i; oldest = i;
break; break;
} }
@ -112,17 +113,17 @@ uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
/* Use the oldest or first free entry (either pointed to by the /* Use the oldest or first free entry (either pointed to by the
"oldest" variable). */ "oldest" variable). */
entries[oldest].time = 0; entries[oldest].time = 0;
uip_ipaddr_copy(entries[oldest].ipaddr, ipaddr); uip_ipaddr_copy(&entries[oldest].ipaddr, ipaddr);
memcpy(&entries[oldest].addr, addr, sizeof(struct uip_neighbor_addr)); memcpy(&entries[oldest].addr, addr, sizeof(struct uip_neighbor_addr));
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
static struct neighbor_entry * static struct neighbor_entry *
find_entry(uip_ipaddr_t ipaddr) find_entry(uip_ipaddr_t *ipaddr)
{ {
int i; int i;
for(i = 0; i < ENTRIES; ++i) { for(i = 0; i < ENTRIES; ++i) {
if(uip_ipaddr_cmp(entries[i].ipaddr, ipaddr)) { if(uip_ipaddr_cmp(&entries[i].ipaddr, ipaddr)) {
return &entries[i]; return &entries[i];
} }
} }
@ -130,7 +131,7 @@ find_entry(uip_ipaddr_t ipaddr)
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void void
uip_neighbor_update(uip_ipaddr_t ipaddr) uip_neighbor_update(uip_ipaddr_t *ipaddr)
{ {
struct neighbor_entry *e; struct neighbor_entry *e;
@ -141,7 +142,7 @@ uip_neighbor_update(uip_ipaddr_t ipaddr)
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
struct uip_neighbor_addr * struct uip_neighbor_addr *
uip_neighbor_lookup(uip_ipaddr_t ipaddr) uip_neighbor_lookup(uip_ipaddr_t *ipaddr)
{ {
struct neighbor_entry *e; struct neighbor_entry *e;

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* $Id: uip-neighbor.h,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uip-neighbor.h,v 1.2 2006/08/09 16:13:40 bg- Exp $
*/ */
/** /**
@ -53,9 +53,9 @@ struct uip_neighbor_addr {
}; };
void uip_neighbor_init(void); void uip_neighbor_init(void);
void uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr); void uip_neighbor_add(uip_ipaddr_t *ipaddr, struct uip_neighbor_addr *addr);
void uip_neighbor_update(uip_ipaddr_t ipaddr); void uip_neighbor_update(uip_ipaddr_t *ipaddr);
struct uip_neighbor_addr *uip_neighbor_lookup(uip_ipaddr_t ipaddr); struct uip_neighbor_addr *uip_neighbor_lookup(uip_ipaddr_t *ipaddr);
void uip_neighbor_periodic(void); void uip_neighbor_periodic(void);
#endif /* __UIP-NEIGHBOR_H__ */ #endif /* __UIP-NEIGHBOR_H__ */

View file

@ -41,7 +41,7 @@
* *
* This file is part of the uIP TCP/IP stack. * This file is part of the uIP TCP/IP stack.
* *
* $Id: uip.c,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uip.c,v 1.2 2006/08/09 16:13:40 bg- Exp $
* *
*/ */
@ -106,13 +106,13 @@ const uip_ipaddr_t uip_broadcast_addr =
#if UIP_CONF_IPV6 #if UIP_CONF_IPV6
{0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}; {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
#else /* UIP_CONF_IPV6 */ #else /* UIP_CONF_IPV6 */
{0xffff,0xffff}; { .u16 = {0xffff,0xffff} };
#endif /* UIP_CONF_IPV6 */ #endif /* UIP_CONF_IPV6 */
static const uip_ipaddr_t all_zeroes_addr = const uip_ipaddr_t all_zeroes_addr =
#if UIP_CONF_IPV6 #if UIP_CONF_IPV6
{0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000}; {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
#else /* UIP_CONF_IPV6 */ #else /* UIP_CONF_IPV6 */
{0x0000,0x0000}; { .u16 = {0x0000,0x0000} };
#endif /* UIP_CONF_IPV6 */ #endif /* UIP_CONF_IPV6 */
@ -334,7 +334,7 @@ upper_layer_chksum(u8_t proto)
/* IP protocol and length fields. This addition cannot carry. */ /* IP protocol and length fields. This addition cannot carry. */
sum = upper_layer_len + proto; sum = upper_layer_len + proto;
/* Sum IP source and destination addresses. */ /* Sum IP source and destination addresses. */
sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); sum = chksum(sum, (u8_t *)&BUF->srcipaddr, 2 * sizeof(uip_ipaddr_t));
/* Sum TCP header and data. */ /* Sum TCP header and data. */
sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN],
@ -496,7 +496,7 @@ uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport)
conn->lport = HTONS(lastport); conn->lport = HTONS(lastport);
conn->rport = rport; conn->rport = rport;
if(ripaddr == NULL) { if(ripaddr == NULL) {
memset(conn->ripaddr, 0, sizeof(uip_ipaddr_t)); memset(&conn->ripaddr, 0, sizeof(uip_ipaddr_t));
} else { } else {
uip_ipaddr_copy(&conn->ripaddr, ripaddr); uip_ipaddr_copy(&conn->ripaddr, ripaddr);
} }
@ -881,7 +881,7 @@ uip_process(u8_t flag)
} }
#endif /* UIP_CONF_IPV6 */ #endif /* UIP_CONF_IPV6 */
if(uip_ipaddr_cmp(uip_hostaddr, all_zeroes_addr)) { if(uip_ipaddr_cmp(&uip_hostaddr, &all_zeroes_addr)) {
/* If we are configured to use ping IP address configuration and /* If we are configured to use ping IP address configuration and
hasn't been assigned an IP address yet, we accept all ICMP hasn't been assigned an IP address yet, we accept all ICMP
packets. */ packets. */
@ -901,7 +901,7 @@ uip_process(u8_t flag)
#if UIP_BROADCAST #if UIP_BROADCAST
DEBUG_PRINTF("UDP IP checksum 0x%04x\n", uip_ipchksum()); DEBUG_PRINTF("UDP IP checksum 0x%04x\n", uip_ipchksum());
if(BUF->proto == UIP_PROTO_UDP && if(BUF->proto == UIP_PROTO_UDP &&
uip_ipaddr_cmp(BUF->destipaddr, uip_broadcast_addr) uip_ipaddr_cmp(&BUF->destipaddr, &uip_broadcast_addr)
/*&& /*&&
uip_ipchksum() == 0xffff*/) { uip_ipchksum() == 0xffff*/) {
goto udp_input; goto udp_input;
@ -910,7 +910,7 @@ uip_process(u8_t flag)
/* Check if the packet is destined for our IP address. */ /* Check if the packet is destined for our IP address. */
#if !UIP_CONF_IPV6 #if !UIP_CONF_IPV6
if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr)) { if(!uip_ipaddr_cmp(&BUF->destipaddr, &uip_hostaddr)) {
UIP_STAT(++uip_stat.ip.drop); UIP_STAT(++uip_stat.ip.drop);
goto drop; goto drop;
} }
@ -979,9 +979,8 @@ uip_process(u8_t flag)
the destination IP address of this ping packet and assign it to the destination IP address of this ping packet and assign it to
ourself. */ ourself. */
#if UIP_PINGADDRCONF #if UIP_PINGADDRCONF
if((uip_hostaddr[0] | uip_hostaddr[1]) == 0) { if(uip_ipaddr_cmp(&uip_hostaddr, &all_zeroes_addr)) {
uip_hostaddr[0] = BUF->destipaddr[0]; uip_hostaddr = BUF->destipaddr;
uip_hostaddr[1] = BUF->destipaddr[1];
} }
#endif /* UIP_PINGADDRCONF */ #endif /* UIP_PINGADDRCONF */
@ -994,8 +993,8 @@ uip_process(u8_t flag)
} }
/* Swap IP addresses. */ /* Swap IP addresses. */
uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); uip_ipaddr_copy(&BUF->destipaddr, &BUF->srcipaddr);
uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); uip_ipaddr_copy(&BUF->srcipaddr, &uip_hostaddr);
UIP_STAT(++uip_stat.icmp.sent); UIP_STAT(++uip_stat.icmp.sent);
goto send; goto send;
@ -1105,9 +1104,9 @@ uip_process(u8_t flag)
UDPBUF->destport == uip_udp_conn->lport && UDPBUF->destport == uip_udp_conn->lport &&
(uip_udp_conn->rport == 0 || (uip_udp_conn->rport == 0 ||
UDPBUF->srcport == uip_udp_conn->rport) && UDPBUF->srcport == uip_udp_conn->rport) &&
(uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) || (uip_ipaddr_cmp(&uip_udp_conn->ripaddr, &all_zeroes_addr) ||
uip_ipaddr_cmp(uip_udp_conn->ripaddr, uip_broadcast_addr) || uip_ipaddr_cmp(&uip_udp_conn->ripaddr, &uip_broadcast_addr) ||
uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr))) { uip_ipaddr_cmp(&BUF->srcipaddr, &uip_udp_conn->ripaddr))) {
goto udp_found; goto udp_found;
} }
} }
@ -1145,8 +1144,8 @@ uip_process(u8_t flag)
BUF->srcport = uip_udp_conn->lport; BUF->srcport = uip_udp_conn->lport;
BUF->destport = uip_udp_conn->rport; BUF->destport = uip_udp_conn->rport;
uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); uip_ipaddr_copy(&BUF->srcipaddr, &uip_hostaddr);
uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr); uip_ipaddr_copy(&BUF->destipaddr, &uip_udp_conn->ripaddr);
uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN]; uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN];
@ -1183,7 +1182,7 @@ uip_process(u8_t flag)
if(uip_connr->tcpstateflags != UIP_CLOSED && if(uip_connr->tcpstateflags != UIP_CLOSED &&
BUF->destport == uip_connr->lport && BUF->destport == uip_connr->lport &&
BUF->srcport == uip_connr->rport && BUF->srcport == uip_connr->rport &&
uip_ipaddr_cmp(BUF->srcipaddr, uip_connr->ripaddr)) { uip_ipaddr_cmp(&BUF->srcipaddr, &uip_connr->ripaddr)) {
goto found; goto found;
} }
} }
@ -1252,8 +1251,8 @@ uip_process(u8_t flag)
BUF->destport = tmp16; BUF->destport = tmp16;
/* Swap IP addresses. */ /* Swap IP addresses. */
uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); uip_ipaddr_copy(&BUF->destipaddr, &BUF->srcipaddr);
uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); uip_ipaddr_copy(&BUF->srcipaddr, &uip_hostaddr);
/* And send out the RST packet! */ /* And send out the RST packet! */
goto tcp_send_noconn; goto tcp_send_noconn;
@ -1299,7 +1298,7 @@ uip_process(u8_t flag)
uip_connr->nrtx = 0; uip_connr->nrtx = 0;
uip_connr->lport = BUF->destport; uip_connr->lport = BUF->destport;
uip_connr->rport = BUF->srcport; uip_connr->rport = BUF->srcport;
uip_ipaddr_copy(uip_connr->ripaddr, BUF->srcipaddr); uip_ipaddr_copy(&uip_connr->ripaddr, &BUF->srcipaddr);
uip_connr->tcpstateflags = UIP_SYN_RCVD; uip_connr->tcpstateflags = UIP_SYN_RCVD;
uip_connr->snd_nxt[0] = iss[0]; uip_connr->snd_nxt[0] = iss[0];
@ -1806,8 +1805,8 @@ uip_process(u8_t flag)
BUF->srcport = uip_connr->lport; BUF->srcport = uip_connr->lport;
BUF->destport = uip_connr->rport; BUF->destport = uip_connr->rport;
uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); uip_ipaddr_copy(&BUF->srcipaddr, &uip_hostaddr);
uip_ipaddr_copy(BUF->destipaddr, uip_connr->ripaddr); uip_ipaddr_copy(&BUF->destipaddr, &uip_connr->ripaddr);
if(uip_connr->tcpstateflags & UIP_STOPPED) { if(uip_connr->tcpstateflags & UIP_STOPPED) {
/* If the connection has issued uip_stop(), we advertise a zero /* If the connection has issued uip_stop(), we advertise a zero

View file

@ -46,7 +46,7 @@
* *
* This file is part of the uIP TCP/IP stack. * This file is part of the uIP TCP/IP stack.
* *
* $Id: uip.h,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uip.h,v 1.2 2006/08/09 16:13:40 bg- Exp $
* *
*/ */
@ -56,17 +56,30 @@
#include "net/uipopt.h" #include "net/uipopt.h"
/** /**
* Repressentation of an IP address. * Representation of an IP address.
* *
*/ */
typedef u16_t uip_ip4addr_t[2]; typedef union uip_ip4addr_t {
typedef u16_t uip_ip6addr_t[8]; u16_t u16[2]; /* Must come first for now!!! */
u8_t u8[4];
#if 0
u32_t u32;
#endif
} uip_ip4addr_t;
typedef union uip_ip6addr_t {
u16_t u16[8];
u8_t u8[16];
} uip_ip6addr_t;
#if UIP_CONF_IPV6 #if UIP_CONF_IPV6
typedef uip_ip6addr_t uip_ipaddr_t; typedef uip_ip6addr_t uip_ipaddr_t;
#else /* UIP_CONF_IPV6 */ #else /* UIP_CONF_IPV6 */
typedef uip_ip4addr_t uip_ipaddr_t; typedef uip_ip4addr_t uip_ipaddr_t;
#endif /* UIP_CONF_IPV6 */ #endif /* UIP_CONF_IPV6 */
#include "net/tcpip.h"
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/* First, the functions that should be called from the /* First, the functions that should be called from the
* system. Initialization, the periodic timer and incoming packets are * system. Initialization, the periodic timer and incoming packets are
@ -103,7 +116,7 @@ typedef uip_ip4addr_t uip_ipaddr_t;
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_sethostaddr(addr) uip_ipaddr_copy(uip_hostaddr, (addr)) #define uip_sethostaddr(addr) uip_ipaddr_copy(&uip_hostaddr, (addr))
/** /**
* Get the IP address of this host. * Get the IP address of this host.
@ -123,7 +136,7 @@ typedef uip_ip4addr_t uip_ipaddr_t;
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_gethostaddr(addr) uip_ipaddr_copy((addr), uip_hostaddr) #define uip_gethostaddr(addr) uip_ipaddr_copy((addr), &uip_hostaddr)
/** /**
* Set the default router's IP address. * Set the default router's IP address.
@ -135,7 +148,7 @@ typedef uip_ip4addr_t uip_ipaddr_t;
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_setdraddr(addr) uip_ipaddr_copy(uip_draddr, (addr)) #define uip_setdraddr(addr) uip_ipaddr_copy(&uip_draddr, (addr))
/** /**
* Set the netmask. * Set the netmask.
@ -147,7 +160,7 @@ typedef uip_ip4addr_t uip_ipaddr_t;
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_setnetmask(addr) uip_ipaddr_copy(uip_netmask, (addr)) #define uip_setnetmask(addr) uip_ipaddr_copy(&uip_netmask, (addr))
/** /**
@ -158,7 +171,7 @@ typedef uip_ip4addr_t uip_ipaddr_t;
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_getdraddr(addr) uip_ipaddr_copy((addr), uip_draddr) #define uip_getdraddr(addr) uip_ipaddr_copy((addr), &uip_draddr)
/** /**
* Get the netmask. * Get the netmask.
@ -168,7 +181,7 @@ typedef uip_ip4addr_t uip_ipaddr_t;
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_getnetmask(addr) uip_ipaddr_copy((addr), uip_netmask) #define uip_getnetmask(addr) uip_ipaddr_copy((addr), &uip_netmask)
/** @} */ /** @} */
@ -838,8 +851,10 @@ struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport);
* \hideinitializer * \hideinitializer
*/ */
#define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \ #define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \
((u16_t *)(addr))[0] = HTONS(((addr0) << 8) | (addr1)); \ (addr)->u8[0] = addr0; \
((u16_t *)(addr))[1] = HTONS(((addr2) << 8) | (addr3)); \ (addr)->u8[1] = addr1; \
(addr)->u8[2] = addr2; \
(addr)->u8[3] = addr3; \
} while(0) } while(0)
/** /**
@ -878,14 +893,7 @@ struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport);
* *
* \hideinitializer * \hideinitializer
*/ */
#if !UIP_CONF_IPV6 #define uip_ipaddr_copy(dest, src) ((*dest) = (*src))
#define uip_ipaddr_copy(dest, src) do { \
((u16_t *)dest)[0] = ((u16_t *)src)[0]; \
((u16_t *)dest)[1] = ((u16_t *)src)[1]; \
} while(0)
#else /* !UIP_CONF_IPV6 */
#define uip_ipaddr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip6addr_t))
#endif /* !UIP_CONF_IPV6 */
/** /**
* Compare two IP addresses * Compare two IP addresses
@ -908,8 +916,8 @@ struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport);
* \hideinitializer * \hideinitializer
*/ */
#if !UIP_CONF_IPV6 #if !UIP_CONF_IPV6
#define uip_ipaddr_cmp(addr1, addr2) (((u16_t *)addr1)[0] == ((u16_t *)addr2)[0] && \ #define uip_ipaddr_cmp(addr1, addr2) ((addr1)->u16[0] == (addr2)->u16[0] && \
((u16_t *)addr1)[1] == ((u16_t *)addr2)[1]) (addr1)->u16[1] == (addr2)->u16[1])
#else /* !UIP_CONF_IPV6 */ #else /* !UIP_CONF_IPV6 */
#define uip_ipaddr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0) #define uip_ipaddr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0)
#endif /* !UIP_CONF_IPV6 */ #endif /* !UIP_CONF_IPV6 */
@ -992,7 +1000,7 @@ struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport);
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_ipaddr1(addr) (htons(((u16_t *)(addr))[0]) >> 8) #define uip_ipaddr1(addr) ((addr)->u8[0])
/** /**
* Pick the second octet of an IP address. * Pick the second octet of an IP address.
@ -1012,7 +1020,7 @@ struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport);
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_ipaddr2(addr) (htons(((u16_t *)(addr))[0]) & 0xff) #define uip_ipaddr2(addr) ((addr)->u8[1])
/** /**
* Pick the third octet of an IP address. * Pick the third octet of an IP address.
@ -1032,7 +1040,7 @@ struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport);
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_ipaddr3(addr) (htons(((u16_t *)(addr))[1]) >> 8) #define uip_ipaddr3(addr) ((addr)->u8[2])
/** /**
* Pick the fourth octet of an IP address. * Pick the fourth octet of an IP address.
@ -1052,7 +1060,7 @@ struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport);
* *
* \hideinitializer * \hideinitializer
*/ */
#define uip_ipaddr4(addr) (htons(((u16_t *)(addr))[1]) & 0xff) #define uip_ipaddr4(addr) ((addr)->u8[3])
/** /**
* Convert 16-bit quantity from host byte order to network byte order. * Convert 16-bit quantity from host byte order to network byte order.
@ -1403,8 +1411,7 @@ struct uip_tcpip_hdr {
ttl, ttl,
proto; proto;
u16_t ipchksum; u16_t ipchksum;
u16_t srcipaddr[2], uip_ipaddr_t srcipaddr, destipaddr;
destipaddr[2];
#endif /* UIP_CONF_IPV6 */ #endif /* UIP_CONF_IPV6 */
/* TCP header. */ /* TCP header. */
@ -1440,8 +1447,7 @@ struct uip_icmpip_hdr {
ttl, ttl,
proto; proto;
u16_t ipchksum; u16_t ipchksum;
u16_t srcipaddr[2], uip_ipaddr_t srcipaddr, destipaddr;
destipaddr[2];
#endif /* UIP_CONF_IPV6 */ #endif /* UIP_CONF_IPV6 */
/* ICMP (echo) header. */ /* ICMP (echo) header. */
@ -1477,8 +1483,7 @@ struct uip_udpip_hdr {
ttl, ttl,
proto; proto;
u16_t ipchksum; u16_t ipchksum;
u16_t srcipaddr[2], uip_ipaddr_t srcipaddr, destipaddr;
destipaddr[2];
#endif /* UIP_CONF_IPV6 */ #endif /* UIP_CONF_IPV6 */
/* UDP header. */ /* UDP header. */
@ -1535,6 +1540,7 @@ extern const uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr;
extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr; extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr;
#endif /* UIP_FIXEDADDR */ #endif /* UIP_FIXEDADDR */
extern const uip_ipaddr_t uip_broadcast_addr; extern const uip_ipaddr_t uip_broadcast_addr;
extern const uip_ipaddr_t all_zeroes_addr;
/** /**

View file

@ -54,7 +54,7 @@
* *
* This file is part of the uIP TCP/IP stack. * This file is part of the uIP TCP/IP stack.
* *
* $Id: uip_arp.c,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uip_arp.c,v 1.2 2006/08/09 16:13:40 bg- Exp $
* *
*/ */
@ -71,9 +71,9 @@ struct arp_hdr {
u8_t protolen; u8_t protolen;
u16_t opcode; u16_t opcode;
struct uip_eth_addr shwaddr; struct uip_eth_addr shwaddr;
u16_t sipaddr[2]; uip_ipaddr_t sipaddr;
struct uip_eth_addr dhwaddr; struct uip_eth_addr dhwaddr;
u16_t dipaddr[2]; uip_ipaddr_t dipaddr;
}; };
struct ethip_hdr { struct ethip_hdr {
@ -87,8 +87,7 @@ struct ethip_hdr {
ttl, ttl,
proto; proto;
u16_t ipchksum; u16_t ipchksum;
u16_t srcipaddr[2], uip_ipaddr_t srcipaddr, destipaddr;
destipaddr[2];
}; };
#define ARP_REQUEST 1 #define ARP_REQUEST 1
@ -97,7 +96,7 @@ struct ethip_hdr {
#define ARP_HWTYPE_ETH 1 #define ARP_HWTYPE_ETH 1
struct arp_entry { struct arp_entry {
u16_t ipaddr[2]; uip_ipaddr_t ipaddr;
struct uip_eth_addr ethaddr; struct uip_eth_addr ethaddr;
u8_t time; u8_t time;
}; };
@ -107,7 +106,7 @@ static const struct uip_eth_addr broadcast_ethaddr =
static const u16_t broadcast_ipaddr[2] = {0xffff,0xffff}; static const u16_t broadcast_ipaddr[2] = {0xffff,0xffff};
static struct arp_entry arp_table[UIP_ARPTAB_SIZE]; static struct arp_entry arp_table[UIP_ARPTAB_SIZE];
static u16_t ipaddr[2]; static uip_ipaddr_t ipaddr;
static u8_t i, c; static u8_t i, c;
static u8_t arptime; static u8_t arptime;
@ -125,7 +124,7 @@ void
uip_arp_init(void) uip_arp_init(void)
{ {
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
memset(arp_table[i].ipaddr, 0, 4); memset(&arp_table[i].ipaddr, 0, 4);
} }
} }
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
@ -146,16 +145,16 @@ uip_arp_timer(void)
++arptime; ++arptime;
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
tabptr = &arp_table[i]; tabptr = &arp_table[i];
if((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 && if(uip_ipaddr_cmp(&tabptr->ipaddr, &all_zeroes_addr) &&
arptime - tabptr->time >= UIP_ARP_MAXAGE) { arptime - tabptr->time >= UIP_ARP_MAXAGE) {
memset(tabptr->ipaddr, 0, 4); memset(&tabptr->ipaddr, 0, 4);
} }
} }
} }
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
static void static void
uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr) uip_arp_update(uip_ipaddr_t *ipaddr, struct uip_eth_addr *ethaddr)
{ {
register struct arp_entry *tabptr; register struct arp_entry *tabptr;
/* Walk through the ARP mapping table and try to find an entry to /* Walk through the ARP mapping table and try to find an entry to
@ -165,13 +164,11 @@ uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr)
tabptr = &arp_table[i]; tabptr = &arp_table[i];
/* Only check those entries that are actually in use. */ /* Only check those entries that are actually in use. */
if(tabptr->ipaddr[0] != 0 && if(!uip_ipaddr_cmp(&tabptr->ipaddr, &all_zeroes_addr)) {
tabptr->ipaddr[1] != 0) {
/* Check if the source IP address of the incoming packet matches /* Check if the source IP address of the incoming packet matches
the IP address in this ARP table entry. */ the IP address in this ARP table entry. */
if(ipaddr[0] == tabptr->ipaddr[0] && if(uip_ipaddr_cmp(ipaddr, &tabptr->ipaddr)) {
ipaddr[1] == tabptr->ipaddr[1]) {
/* An old entry found, update this and return. */ /* An old entry found, update this and return. */
memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
@ -188,8 +185,7 @@ uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr)
/* First, we try to find an unused entry in the ARP table. */ /* First, we try to find an unused entry in the ARP table. */
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
tabptr = &arp_table[i]; tabptr = &arp_table[i];
if(tabptr->ipaddr[0] == 0 && if(uip_ipaddr_cmp(&tabptr->ipaddr, &all_zeroes_addr)) {
tabptr->ipaddr[1] == 0) {
break; break;
} }
} }
@ -212,7 +208,7 @@ uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr)
/* Now, i is the ARP table entry which we will fill with the new /* Now, i is the ARP table entry which we will fill with the new
information. */ information. */
memcpy(tabptr->ipaddr, ipaddr, 4); tabptr->ipaddr = *ipaddr;
memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6);
tabptr->time = arptime; tabptr->time = arptime;
} }
@ -290,11 +286,11 @@ uip_arp_arpin(void)
reply. */ reply. */
/* if(BUF->dipaddr[0] == uip_hostaddr[0] && /* if(BUF->dipaddr[0] == uip_hostaddr[0] &&
BUF->dipaddr[1] == uip_hostaddr[1]) {*/ BUF->dipaddr[1] == uip_hostaddr[1]) {*/
if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { if(uip_ipaddr_cmp(&BUF->dipaddr, &uip_hostaddr)) {
/* First, we register the one who made the request in our ARP /* First, we register the one who made the request in our ARP
table, since it is likely that we will do more communication table, since it is likely that we will do more communication
with this host in the future. */ with this host in the future. */
uip_arp_update(BUF->sipaddr, &BUF->shwaddr); uip_arp_update(&BUF->sipaddr, &BUF->shwaddr);
/* The reply opcode is 2. */ /* The reply opcode is 2. */
BUF->opcode = HTONS(2); BUF->opcode = HTONS(2);
@ -304,10 +300,8 @@ uip_arp_arpin(void)
memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6); memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6);
BUF->dipaddr[0] = BUF->sipaddr[0]; BUF->dipaddr = BUF->sipaddr;
BUF->dipaddr[1] = BUF->sipaddr[1]; BUF->sipaddr = uip_hostaddr;
BUF->sipaddr[0] = uip_hostaddr[0];
BUF->sipaddr[1] = uip_hostaddr[1];
BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP); BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP);
uip_len = sizeof(struct arp_hdr); uip_len = sizeof(struct arp_hdr);
@ -318,8 +312,8 @@ uip_arp_arpin(void)
for us. */ for us. */
/* if(BUF->dipaddr[0] == uip_hostaddr[0] && /* if(BUF->dipaddr[0] == uip_hostaddr[0] &&
BUF->dipaddr[1] == uip_hostaddr[1]) {*/ BUF->dipaddr[1] == uip_hostaddr[1]) {*/
if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { if(uip_ipaddr_cmp(&BUF->dipaddr, &uip_hostaddr)) {
uip_arp_update(BUF->sipaddr, &BUF->shwaddr); uip_arp_update(&BUF->sipaddr, &BUF->shwaddr);
} }
break; break;
} }
@ -367,23 +361,23 @@ uip_arp_out(void)
packet with an ARP request for the IP address. */ packet with an ARP request for the IP address. */
/* First check if destination is a local broadcast. */ /* First check if destination is a local broadcast. */
if(uip_ipaddr_cmp(IPBUF->destipaddr, broadcast_ipaddr)) { if(uip_ipaddr_cmp(&IPBUF->destipaddr, &uip_broadcast_addr)) {
memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6); memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6);
} else { } else {
/* Check if the destination address is on the local network. */ /* Check if the destination address is on the local network. */
if(!uip_ipaddr_maskcmp(IPBUF->destipaddr, uip_hostaddr, uip_netmask)) { if(!uip_ipaddr_maskcmp(&IPBUF->destipaddr, &uip_hostaddr, &uip_netmask)) {
/* Destination address was not on the local network, so we need to /* Destination address was not on the local network, so we need to
use the default router's IP address instead of the destination use the default router's IP address instead of the destination
address when determining the MAC address. */ address when determining the MAC address. */
uip_ipaddr_copy(ipaddr, uip_draddr); uip_ipaddr_copy(&ipaddr, &uip_draddr);
} else { } else {
/* Else, we use the destination IP address. */ /* Else, we use the destination IP address. */
uip_ipaddr_copy(ipaddr, IPBUF->destipaddr); uip_ipaddr_copy(&ipaddr, &IPBUF->destipaddr);
} }
for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { for(i = 0; i < UIP_ARPTAB_SIZE; ++i) {
tabptr = &arp_table[i]; tabptr = &arp_table[i];
if(uip_ipaddr_cmp(ipaddr, tabptr->ipaddr)) { if(uip_ipaddr_cmp(&ipaddr, &tabptr->ipaddr)) {
break; break;
} }
} }
@ -397,8 +391,8 @@ uip_arp_out(void)
memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6);
memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6); memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6);
uip_ipaddr_copy(BUF->dipaddr, ipaddr); uip_ipaddr_copy(&BUF->dipaddr, &ipaddr);
uip_ipaddr_copy(BUF->sipaddr, uip_hostaddr); uip_ipaddr_copy(&BUF->sipaddr, &uip_hostaddr);
BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */ BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */
BUF->hwtype = HTONS(ARP_HWTYPE_ETH); BUF->hwtype = HTONS(ARP_HWTYPE_ETH);
BUF->protocol = HTONS(UIP_ETHTYPE_IP); BUF->protocol = HTONS(UIP_ETHTYPE_IP);

View file

@ -53,7 +53,7 @@
* *
* This file is part of the uIP TCP/IP stack. * This file is part of the uIP TCP/IP stack.
* *
* $Id: uipopt.h,v 1.1 2006/06/17 22:41:19 adamdunkels Exp $ * $Id: uipopt.h,v 1.2 2006/08/09 16:13:40 bg- Exp $
* *
*/ */
@ -540,7 +540,5 @@ typedef struct httpd_state uip_tcp_appstate_t
*/ */
/** @} */ /** @} */
#include "net/tcpip.h"
#endif /* __UIPOPT_H__ */ #endif /* __UIPOPT_H__ */
/** @} */ /** @} */

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* @(#)$Id: contiki-esb-default-init-net.c,v 1.1 2006/06/17 22:41:27 adamdunkels Exp $ * @(#)$Id: contiki-esb-default-init-net.c,v 1.2 2006/08/09 16:13:40 bg- Exp $
*/ */
#include "contiki-esb.h" #include "contiki-esb.h"
@ -44,7 +44,7 @@ static struct uip_fw_netif slipif =
void void
init_net(void) init_net(void)
{ {
u16_t hostaddr[2]; uip_ipaddr_t hostaddr;
rs232_set_input(slip_input_byte); rs232_set_input(slip_input_byte);
@ -53,8 +53,8 @@ init_net(void)
if (NODE_ID > 0) { if (NODE_ID > 0) {
/* node id is set, construct an ip address based on the node id */ /* node id is set, construct an ip address based on the node id */
uip_ipaddr(hostaddr, 172, 16, 1, NODE_ID); uip_ipaddr(&hostaddr, 172, 16, 1, NODE_ID);
uip_sethostaddr(hostaddr); uip_sethostaddr(&hostaddr);
} }
uip_fw_register(&slipif); uip_fw_register(&slipif);
uip_fw_default(&tr1001if); uip_fw_default(&tr1001if);

View file

@ -29,7 +29,7 @@
* *
* This file is part of the Contiki OS * This file is part of the Contiki OS
* *
* $Id: contiki-main.c,v 1.1 2006/06/17 22:41:31 adamdunkels Exp $ * $Id: contiki-main.c,v 1.2 2006/08/09 16:13:40 bg- Exp $
* *
*/ */
@ -57,14 +57,14 @@ main(void)
autostart_start(autostart_processes); autostart_start(autostart_processes);
uip_ipaddr(addr, 192,168,2,2); uip_ipaddr(&addr, 192,168,2,2);
uip_sethostaddr(addr); uip_sethostaddr(&addr);
uip_ipaddr(addr, 192,168,2,1); uip_ipaddr(&addr, 192,168,2,1);
uip_setdraddr(addr); uip_setdraddr(&addr);
uip_ipaddr(addr, 255,255,255,0); uip_ipaddr(&addr, 255,255,255,0);
uip_setnetmask(addr); uip_setnetmask(&addr);
printf("Contiki initiated, now starting process scheduling\n"); printf("Contiki initiated, now starting process scheduling\n");

View file

@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)$Id: dhclient.c,v 1.1 2006/08/02 14:44:46 bg- Exp $ * @(#)$Id: dhclient.c,v 1.2 2006/08/09 16:13:40 bg- Exp $
*/ */
/* /*
@ -100,7 +100,7 @@ main(int argc, char **argv)
leds_toggle(LEDS_RED | LEDS_GREEN | LEDS_BLUE); leds_toggle(LEDS_RED | LEDS_GREEN | LEDS_BLUE);
slip_arch_init(); /* Must come before first printf */ slip_arch_init(); /* Must come before first printf */
printf("Starting %s " printf("Starting %s "
"($Id: dhclient.c,v 1.1 2006/08/02 14:44:46 bg- Exp $)\n", __FILE__); "($Id: dhclient.c,v 1.2 2006/08/09 16:13:40 bg- Exp $)\n", __FILE__);
ds2411_init(); ds2411_init();
sensors_light_init(); sensors_light_init();
cc2420_init(); cc2420_init();
@ -194,7 +194,7 @@ PROCESS_THREAD(dhclient_process, ev, data)
/* For now use 0.0.0.0 as our IP address. */ /* For now use 0.0.0.0 as our IP address. */
uip_ipaddr(&uip_hostaddr, 0,0,0,0); uip_ipaddr(&uip_hostaddr, 0,0,0,0);
cc2420_set_chan_pan_addr(RF_CHANNEL, panId, uip_hostaddr[1], ds2411_id); cc2420_set_chan_pan_addr(RF_CHANNEL, panId, uip_hostaddr.u16[1], ds2411_id);
/* Use only radio interface and enable forwarding. */ /* Use only radio interface and enable forwarding. */
uip_fw_default(&cc2420if); uip_fw_default(&cc2420if);
@ -230,18 +230,18 @@ dhcpc_configured(const struct dhcpc_state *s)
process_start(&uaodv_process, NULL); process_start(&uaodv_process, NULL);
} }
uip_sethostaddr(s->ipaddr); uip_sethostaddr(&s->ipaddr);
uip_setnetmask(s->netmask); uip_setnetmask(&s->netmask);
uip_setdraddr(s->default_router); uip_setdraddr(&s->default_router);
uip_ipaddr_copy(&cc2420if.ipaddr, s->ipaddr); uip_ipaddr_copy(&cc2420if.ipaddr, &s->ipaddr);
uip_ipaddr_copy(&cc2420if.netmask, s->netmask); uip_ipaddr_copy(&cc2420if.netmask, &s->netmask);
/* resolv_conf(s->dnsaddr); */ /* resolv_conf(s->dnsaddr); */
/* /*
* Now we also have a new short MAC address! * Now we also have a new short MAC address!
*/ */
cc2420_set_chan_pan_addr(RF_CHANNEL, panId, uip_hostaddr[1], ds2411_id); cc2420_set_chan_pan_addr(RF_CHANNEL, panId, uip_hostaddr.u16[1], ds2411_id);
/* Use only radio interface and enable forwarding. */ /* Use only radio interface and enable forwarding. */
uip_fw_init(); uip_fw_init();
@ -257,10 +257,10 @@ dhcpc_unconfigured(const struct dhcpc_state *s)
is_configured = 0; is_configured = 0;
process_exit(&uaodv_process); process_exit(&uaodv_process);
uip_ipaddr(uip_hostaddr, 0,0,0,0); uip_ipaddr(&uip_hostaddr, 0,0,0,0);
uip_ipaddr(uip_netmask, 0,0,0,0); uip_ipaddr(&uip_netmask, 0,0,0,0);
uip_ipaddr(uip_draddr, 0,0,0,0); uip_ipaddr(&uip_draddr, 0,0,0,0);
/* New short MAC address. */ /* New short MAC address. */
cc2420_set_chan_pan_addr(RF_CHANNEL, panId, uip_hostaddr[1], ds2411_id); cc2420_set_chan_pan_addr(RF_CHANNEL, panId, uip_hostaddr.u16[1], ds2411_id);
} }

View file

@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)$Id: gateway.c,v 1.1 2006/08/02 14:44:46 bg- Exp $ * @(#)$Id: gateway.c,v 1.2 2006/08/09 16:13:40 bg- Exp $
*/ */
/* /*
@ -110,7 +110,7 @@ main(int argc, char **argv)
leds_toggle(LEDS_RED | LEDS_GREEN | LEDS_BLUE); leds_toggle(LEDS_RED | LEDS_GREEN | LEDS_BLUE);
slip_arch_init(); /* Must come before first printf */ slip_arch_init(); /* Must come before first printf */
printf("Starting %s " printf("Starting %s "
"($Id: gateway.c,v 1.1 2006/08/02 14:44:46 bg- Exp $)\n", __FILE__); "($Id: gateway.c,v 1.2 2006/08/09 16:13:40 bg- Exp $)\n", __FILE__);
ds2411_init(); ds2411_init();
sensors_light_init(); sensors_light_init();
cc2420_init(); cc2420_init();
@ -128,7 +128,7 @@ main(int argc, char **argv)
uip_ipaddr_copy(&uip_netmask, &cc2420if.netmask); uip_ipaddr_copy(&uip_netmask, &cc2420if.netmask);
printf("IP %d.%d.%d.%d netmask %d.%d.%d.%d\n", printf("IP %d.%d.%d.%d netmask %d.%d.%d.%d\n",
ip2quad(&uip_hostaddr), ip2quad(&uip_netmask)); ip2quad(&uip_hostaddr), ip2quad(&uip_netmask));
cc2420_set_chan_pan_addr(RF_CHANNEL, panId, uip_hostaddr[1], ds2411_id); cc2420_set_chan_pan_addr(RF_CHANNEL, panId, uip_hostaddr.u16[1], ds2411_id);
/* /*
* Initialize Contiki and our processes. * Initialize Contiki and our processes.

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* @(#)$Id: udprecv.c,v 1.1 2006/08/02 14:44:46 bg- Exp $ * @(#)$Id: udprecv.c,v 1.2 2006/08/09 16:13:40 bg- Exp $
*/ */
#include <stdio.h> #include <stdio.h>
@ -51,7 +51,7 @@ PROCESS_THREAD(udprecv_process, ev, data)
{ {
uip_ipaddr_t any; uip_ipaddr_t any;
uip_ipaddr(&any, 0,0,0,0); uip_ipaddr(&any, 0,0,0,0);
c = udp_new(any, HTONS(0), NULL); c = udp_new(&any, HTONS(0), NULL);
uip_udp_bind(c, HTONS(4321)); uip_udp_bind(c, HTONS(4321));
} }
@ -59,7 +59,7 @@ PROCESS_THREAD(udprecv_process, ev, data)
PROCESS_YIELD(); PROCESS_YIELD();
if(ev == tcpip_event && uip_newdata()) { if(ev == tcpip_event && uip_newdata()) {
u8_t *src = (u8_t *)((struct uip_udpip_hdr *)uip_buf)->srcipaddr; u8_t *src = ((struct uip_udpip_hdr *)uip_buf)->srcipaddr.u8;
printf("%d.%d.%d.%d: %s\n", printf("%d.%d.%d.%d: %s\n",
src[0], src[1], src[2], src[3], (char *)uip_appdata); src[0], src[1], src[2], src[3], (char *)uip_appdata);
} }

View file

@ -28,7 +28,7 @@
* *
* This file is part of the Contiki operating system. * This file is part of the Contiki operating system.
* *
* @(#)$Id: udpsend.c,v 1.1 2006/08/02 14:44:46 bg- Exp $ * @(#)$Id: udpsend.c,v 1.2 2006/08/09 16:13:40 bg- Exp $
*/ */
/* Set the IP destination address to something different from the /* Set the IP destination address to something different from the
@ -60,7 +60,7 @@ PROCESS_THREAD(udpsend_process, ev, data)
{ {
uip_ipaddr_t addr; uip_ipaddr_t addr;
uip_ipaddr(&addr, 255,255,255,255); /* Change address here! */ uip_ipaddr(&addr, 255,255,255,255); /* Change address here! */
c = udp_new(addr, HTONS(4321), NULL); c = udp_new(&addr, HTONS(4321), NULL);
c->ttl = 1; /* One hop only. */ c->ttl = 1; /* One hop only. */
} }