Used in Live Traffic Update Nokia LCD Display Project

Fork of NetServices by Segundo Equipo

Committer:
rrajan8
Date:
Wed Mar 06 19:07:23 2013 +0000
Revision:
8:92b57208ab99
Parent:
0:ac1725ba162c
This project utilizes mbed's networking features to display live traffic updates on the Nokia LCD using the MapQuest API's Traffic Web Service.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
segundo 0:ac1725ba162c 1 /*
segundo 0:ac1725ba162c 2 * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
segundo 0:ac1725ba162c 3 * Copyright (c) 2003-2004 Leon Woestenberg <leon.woestenberg@axon.tv>
segundo 0:ac1725ba162c 4 * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands.
segundo 0:ac1725ba162c 5 * All rights reserved.
segundo 0:ac1725ba162c 6 *
segundo 0:ac1725ba162c 7 * Redistribution and use in source and binary forms, with or without modification,
segundo 0:ac1725ba162c 8 * are permitted provided that the following conditions are met:
segundo 0:ac1725ba162c 9 *
segundo 0:ac1725ba162c 10 * 1. Redistributions of source code must retain the above copyright notice,
segundo 0:ac1725ba162c 11 * this list of conditions and the following disclaimer.
segundo 0:ac1725ba162c 12 * 2. Redistributions in binary form must reproduce the above copyright notice,
segundo 0:ac1725ba162c 13 * this list of conditions and the following disclaimer in the documentation
segundo 0:ac1725ba162c 14 * and/or other materials provided with the distribution.
segundo 0:ac1725ba162c 15 * 3. The name of the author may not be used to endorse or promote products
segundo 0:ac1725ba162c 16 * derived from this software without specific prior written permission.
segundo 0:ac1725ba162c 17 *
segundo 0:ac1725ba162c 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
segundo 0:ac1725ba162c 19 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
segundo 0:ac1725ba162c 20 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
segundo 0:ac1725ba162c 21 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
segundo 0:ac1725ba162c 22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
segundo 0:ac1725ba162c 23 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
segundo 0:ac1725ba162c 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
segundo 0:ac1725ba162c 25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
segundo 0:ac1725ba162c 26 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
segundo 0:ac1725ba162c 27 * OF SUCH DAMAGE.
segundo 0:ac1725ba162c 28 *
segundo 0:ac1725ba162c 29 * This file is part of the lwIP TCP/IP stack.
segundo 0:ac1725ba162c 30 *
segundo 0:ac1725ba162c 31 * Author: Adam Dunkels <adam@sics.se>
segundo 0:ac1725ba162c 32 *
segundo 0:ac1725ba162c 33 */
segundo 0:ac1725ba162c 34
segundo 0:ac1725ba162c 35 #ifndef __NETIF_ETHARP_H__
segundo 0:ac1725ba162c 36 #define __NETIF_ETHARP_H__
segundo 0:ac1725ba162c 37
segundo 0:ac1725ba162c 38 #include "lwip/opt.h"
segundo 0:ac1725ba162c 39
segundo 0:ac1725ba162c 40 #if LWIP_ARP || LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */
segundo 0:ac1725ba162c 41
segundo 0:ac1725ba162c 42 #include "lwip/pbuf.h"
segundo 0:ac1725ba162c 43 #include "lwip/ip_addr.h"
segundo 0:ac1725ba162c 44 #include "lwip/netif.h"
segundo 0:ac1725ba162c 45 #include "lwip/ip.h"
segundo 0:ac1725ba162c 46
segundo 0:ac1725ba162c 47 #ifdef __cplusplus
segundo 0:ac1725ba162c 48 extern "C" {
segundo 0:ac1725ba162c 49 #endif
segundo 0:ac1725ba162c 50
segundo 0:ac1725ba162c 51 #ifndef ETHARP_HWADDR_LEN
segundo 0:ac1725ba162c 52 #define ETHARP_HWADDR_LEN 6
segundo 0:ac1725ba162c 53 #endif
segundo 0:ac1725ba162c 54
segundo 0:ac1725ba162c 55 #ifdef PACK_STRUCT_USE_INCLUDES
segundo 0:ac1725ba162c 56 # include "arch/bpstruct.h"
segundo 0:ac1725ba162c 57 #endif
segundo 0:ac1725ba162c 58 PACK_STRUCT_BEGIN
segundo 0:ac1725ba162c 59 struct eth_addr {
segundo 0:ac1725ba162c 60 PACK_STRUCT_FIELD(u8_t addr[ETHARP_HWADDR_LEN]);
segundo 0:ac1725ba162c 61 } PACK_STRUCT_STRUCT;
segundo 0:ac1725ba162c 62 PACK_STRUCT_END
segundo 0:ac1725ba162c 63 #ifdef PACK_STRUCT_USE_INCLUDES
segundo 0:ac1725ba162c 64 # include "arch/epstruct.h"
segundo 0:ac1725ba162c 65 #endif
segundo 0:ac1725ba162c 66
segundo 0:ac1725ba162c 67 #ifdef PACK_STRUCT_USE_INCLUDES
segundo 0:ac1725ba162c 68 # include "arch/bpstruct.h"
segundo 0:ac1725ba162c 69 #endif
segundo 0:ac1725ba162c 70 PACK_STRUCT_BEGIN
segundo 0:ac1725ba162c 71 /* Ethernet header */
segundo 0:ac1725ba162c 72 struct eth_hdr {
segundo 0:ac1725ba162c 73 #if ETH_PAD_SIZE
segundo 0:ac1725ba162c 74 PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]);
segundo 0:ac1725ba162c 75 #endif
segundo 0:ac1725ba162c 76 PACK_STRUCT_FIELD(struct eth_addr dest);
segundo 0:ac1725ba162c 77 PACK_STRUCT_FIELD(struct eth_addr src);
segundo 0:ac1725ba162c 78 PACK_STRUCT_FIELD(u16_t type);
segundo 0:ac1725ba162c 79 } PACK_STRUCT_STRUCT;
segundo 0:ac1725ba162c 80 PACK_STRUCT_END
segundo 0:ac1725ba162c 81 #ifdef PACK_STRUCT_USE_INCLUDES
segundo 0:ac1725ba162c 82 # include "arch/epstruct.h"
segundo 0:ac1725ba162c 83 #endif
segundo 0:ac1725ba162c 84
segundo 0:ac1725ba162c 85 #define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE)
segundo 0:ac1725ba162c 86
segundo 0:ac1725ba162c 87 #if ETHARP_SUPPORT_VLAN
segundo 0:ac1725ba162c 88
segundo 0:ac1725ba162c 89 #ifdef PACK_STRUCT_USE_INCLUDES
segundo 0:ac1725ba162c 90 # include "arch/bpstruct.h"
segundo 0:ac1725ba162c 91 #endif
segundo 0:ac1725ba162c 92 PACK_STRUCT_BEGIN
segundo 0:ac1725ba162c 93 /* VLAN header inserted between ethernet header and payload
segundo 0:ac1725ba162c 94 * if 'type' in ethernet header is ETHTYPE_VLAN.
segundo 0:ac1725ba162c 95 * See IEEE802.Q */
segundo 0:ac1725ba162c 96 struct eth_vlan_hdr {
segundo 0:ac1725ba162c 97 PACK_STRUCT_FIELD(u16_t tpid);
segundo 0:ac1725ba162c 98 PACK_STRUCT_FIELD(u16_t prio_vid);
segundo 0:ac1725ba162c 99 } PACK_STRUCT_STRUCT;
segundo 0:ac1725ba162c 100 PACK_STRUCT_END
segundo 0:ac1725ba162c 101 #ifdef PACK_STRUCT_USE_INCLUDES
segundo 0:ac1725ba162c 102 # include "arch/epstruct.h"
segundo 0:ac1725ba162c 103 #endif
segundo 0:ac1725ba162c 104
segundo 0:ac1725ba162c 105 #define SIZEOF_VLAN_HDR 4
segundo 0:ac1725ba162c 106 #define VLAN_ID(vlan_hdr) (htons((vlan_hdr)->prio_vid) & 0xFFF)
segundo 0:ac1725ba162c 107
segundo 0:ac1725ba162c 108 #endif /* ETHARP_SUPPORT_VLAN */
segundo 0:ac1725ba162c 109
segundo 0:ac1725ba162c 110 #ifdef PACK_STRUCT_USE_INCLUDES
segundo 0:ac1725ba162c 111 # include "arch/bpstruct.h"
segundo 0:ac1725ba162c 112 #endif
segundo 0:ac1725ba162c 113 PACK_STRUCT_BEGIN
segundo 0:ac1725ba162c 114 /* the ARP message, see RFC 826 ("Packet format") */
segundo 0:ac1725ba162c 115 struct etharp_hdr {
segundo 0:ac1725ba162c 116 PACK_STRUCT_FIELD(u16_t hwtype);
segundo 0:ac1725ba162c 117 PACK_STRUCT_FIELD(u16_t proto);
segundo 0:ac1725ba162c 118 PACK_STRUCT_FIELD(u8_t hwlen);
segundo 0:ac1725ba162c 119 PACK_STRUCT_FIELD(u8_t protolen);
segundo 0:ac1725ba162c 120 PACK_STRUCT_FIELD(u16_t opcode);
segundo 0:ac1725ba162c 121 PACK_STRUCT_FIELD(struct eth_addr shwaddr);
segundo 0:ac1725ba162c 122 PACK_STRUCT_FIELD(struct ip_addr2 sipaddr);
segundo 0:ac1725ba162c 123 PACK_STRUCT_FIELD(struct eth_addr dhwaddr);
segundo 0:ac1725ba162c 124 PACK_STRUCT_FIELD(struct ip_addr2 dipaddr);
segundo 0:ac1725ba162c 125 } PACK_STRUCT_STRUCT;
segundo 0:ac1725ba162c 126 PACK_STRUCT_END
segundo 0:ac1725ba162c 127 #ifdef PACK_STRUCT_USE_INCLUDES
segundo 0:ac1725ba162c 128 # include "arch/epstruct.h"
segundo 0:ac1725ba162c 129 #endif
segundo 0:ac1725ba162c 130
segundo 0:ac1725ba162c 131 #define SIZEOF_ETHARP_HDR 28
segundo 0:ac1725ba162c 132 #define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR)
segundo 0:ac1725ba162c 133
segundo 0:ac1725ba162c 134 /* 5 seconds period */
segundo 0:ac1725ba162c 135 #define ARP_TMR_INTERVAL 5000
segundo 0:ac1725ba162c 136
segundo 0:ac1725ba162c 137 #define ETHTYPE_ARP 0x0806
segundo 0:ac1725ba162c 138 #define ETHTYPE_IP 0x0800
segundo 0:ac1725ba162c 139 #define ETHTYPE_VLAN 0x8100
segundo 0:ac1725ba162c 140 #define ETHTYPE_PPPOEDISC 0x8863 /* PPP Over Ethernet Discovery Stage */
segundo 0:ac1725ba162c 141 #define ETHTYPE_PPPOE 0x8864 /* PPP Over Ethernet Session Stage */
segundo 0:ac1725ba162c 142
segundo 0:ac1725ba162c 143 /* MEMCPY-like macro to copy to/from struct eth_addr's that are local variables
segundo 0:ac1725ba162c 144 * or known to be 32-bit aligned within the protocol header. */
segundo 0:ac1725ba162c 145 #ifndef ETHADDR32_COPY
segundo 0:ac1725ba162c 146 #define ETHADDR32_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN)
segundo 0:ac1725ba162c 147 #endif
segundo 0:ac1725ba162c 148
segundo 0:ac1725ba162c 149 /* MEMCPY-like macro to copy to/from struct eth_addr's that are no local
segundo 0:ac1725ba162c 150 * variables and known to be 16-bit aligned within the protocol header. */
segundo 0:ac1725ba162c 151 #ifndef ETHADDR16_COPY
segundo 0:ac1725ba162c 152 #define ETHADDR16_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN)
segundo 0:ac1725ba162c 153 #endif
segundo 0:ac1725ba162c 154
segundo 0:ac1725ba162c 155 #if LWIP_ARP /* don't build if not configured for use in lwipopts.h */
segundo 0:ac1725ba162c 156
segundo 0:ac1725ba162c 157 /* ARP message types (opcodes) */
segundo 0:ac1725ba162c 158 #define ARP_REQUEST 1
segundo 0:ac1725ba162c 159 #define ARP_REPLY 2
segundo 0:ac1725ba162c 160
segundo 0:ac1725ba162c 161 /* Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type)
segundo 0:ac1725ba162c 162 * to a filter function that returns the correct netif when using multiple
segundo 0:ac1725ba162c 163 * netifs on one hardware interface where the netif's low-level receive
segundo 0:ac1725ba162c 164 * routine cannot decide for the correct netif (e.g. when mapping multiple
segundo 0:ac1725ba162c 165 * IP addresses to one hardware interface).
segundo 0:ac1725ba162c 166 */
segundo 0:ac1725ba162c 167 #ifndef LWIP_ARP_FILTER_NETIF
segundo 0:ac1725ba162c 168 #define LWIP_ARP_FILTER_NETIF 0
segundo 0:ac1725ba162c 169 #endif
segundo 0:ac1725ba162c 170
segundo 0:ac1725ba162c 171 #if ARP_QUEUEING
segundo 0:ac1725ba162c 172 /* struct for queueing outgoing packets for unknown address
segundo 0:ac1725ba162c 173 * defined here to be accessed by memp.h
segundo 0:ac1725ba162c 174 */
segundo 0:ac1725ba162c 175 struct etharp_q_entry {
segundo 0:ac1725ba162c 176 struct etharp_q_entry *next;
segundo 0:ac1725ba162c 177 struct pbuf *p;
segundo 0:ac1725ba162c 178 };
segundo 0:ac1725ba162c 179 #endif /* ARP_QUEUEING */
segundo 0:ac1725ba162c 180
segundo 0:ac1725ba162c 181 #define etharp_init() /* Compatibility define, not init needed. */
segundo 0:ac1725ba162c 182 void etharp_tmr(void);
segundo 0:ac1725ba162c 183 s8_t etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr,
segundo 0:ac1725ba162c 184 struct eth_addr **eth_ret, ip_addr_t **ip_ret);
segundo 0:ac1725ba162c 185 err_t etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr);
segundo 0:ac1725ba162c 186 err_t etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q);
segundo 0:ac1725ba162c 187 err_t etharp_request(struct netif *netif, ip_addr_t *ipaddr);
segundo 0:ac1725ba162c 188 /* For Ethernet network interfaces, we might want to send "gratuitous ARP";
segundo 0:ac1725ba162c 189 * this is an ARP packet sent by a node in order to spontaneously cause other
segundo 0:ac1725ba162c 190 * nodes to update an entry in their ARP cache.
segundo 0:ac1725ba162c 191 * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */
segundo 0:ac1725ba162c 192 #define etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr)
segundo 0:ac1725ba162c 193
segundo 0:ac1725ba162c 194 #if ETHARP_SUPPORT_STATIC_ENTRIES
segundo 0:ac1725ba162c 195 err_t etharp_add_static_entry(ip_addr_t *ipaddr, struct eth_addr *ethaddr);
segundo 0:ac1725ba162c 196 err_t etharp_remove_static_entry(ip_addr_t *ipaddr);
segundo 0:ac1725ba162c 197 #endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
segundo 0:ac1725ba162c 198
segundo 0:ac1725ba162c 199 #if LWIP_AUTOIP
segundo 0:ac1725ba162c 200 err_t etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr,
segundo 0:ac1725ba162c 201 const struct eth_addr *ethdst_addr,
segundo 0:ac1725ba162c 202 const struct eth_addr *hwsrc_addr, const ip_addr_t *ipsrc_addr,
segundo 0:ac1725ba162c 203 const struct eth_addr *hwdst_addr, const ip_addr_t *ipdst_addr,
segundo 0:ac1725ba162c 204 const u16_t opcode);
segundo 0:ac1725ba162c 205 #endif /* LWIP_AUTOIP */
segundo 0:ac1725ba162c 206
segundo 0:ac1725ba162c 207 #endif /* LWIP_ARP */
segundo 0:ac1725ba162c 208
segundo 0:ac1725ba162c 209 err_t ethernet_input(struct pbuf *p, struct netif *netif);
segundo 0:ac1725ba162c 210
segundo 0:ac1725ba162c 211 #define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETHARP_HWADDR_LEN) == 0)
segundo 0:ac1725ba162c 212
segundo 0:ac1725ba162c 213 extern const struct eth_addr ethbroadcast, ethzero;
segundo 0:ac1725ba162c 214
segundo 0:ac1725ba162c 215 #ifdef __cplusplus
segundo 0:ac1725ba162c 216 }
segundo 0:ac1725ba162c 217 #endif
segundo 0:ac1725ba162c 218
segundo 0:ac1725ba162c 219 #endif /* LWIP_ARP || LWIP_ETHERNET */
segundo 0:ac1725ba162c 220
segundo 0:ac1725ba162c 221 #endif /* __NETIF_ARP_H__ */