00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef __LWIP_UDP_H__
00033 #define __LWIP_UDP_H__
00034
00035 #include "lwip/arch.h"
00036
00037 #include "lwip/pbuf.h"
00038 #include "lwip/inet.h"
00039 #include "lwip/ip.h"
00040
00041 #include "lwip/err.h"
00042
00043 #define UDP_HLEN 8
00044
00045 struct udp_hdr {
00046 PACK_STRUCT_FIELD(u16_t src);
00047 PACK_STRUCT_FIELD(u16_t dest);
00048 PACK_STRUCT_FIELD(u16_t len);
00049 PACK_STRUCT_FIELD(u16_t chksum);
00050 } PACK_STRUCT_STRUCT;
00051
00052 #define UDP_FLAGS_NOCHKSUM 0x01U
00053 #define UDP_FLAGS_UDPLITE 0x02U
00054 #define UDP_FLAGS_CONNECTED 0x04U
00055
00056 struct udp_pcb {
00057 struct udp_pcb *next;
00058
00059 struct ip_addr local_ip, remote_ip;
00060 u16_t local_port, remote_port;
00061
00062 u8_t flags;
00063 u16_t chksum_len;
00064
00065 void (* recv)(void *arg, struct udp_pcb *pcb, struct pbuf *p,
00066 struct ip_addr *addr, u16_t port);
00067 void *recv_arg;
00068 };
00069
00070
00071
00072 struct udp_pcb * udp_new (void);
00073 void udp_remove (struct udp_pcb *pcb);
00074 err_t udp_bind (struct udp_pcb *pcb, struct ip_addr *ipaddr,
00075 u16_t port);
00076 err_t udp_connect (struct udp_pcb *pcb, struct ip_addr *ipaddr,
00077 u16_t port);
00078 void udp_disconnect (struct udp_pcb *pcb);
00079 void udp_recv (struct udp_pcb *pcb,
00080 void (* recv)(void *arg, struct udp_pcb *upcb,
00081 struct pbuf *p,
00082 struct ip_addr *addr,
00083 u16_t port),
00084 void *recv_arg);
00085 err_t udp_send (struct udp_pcb *pcb, struct pbuf *p);
00086
00087 #define udp_flags(pcb) ((pcb)->flags)
00088 #define udp_setflags(pcb, f) ((pcb)->flags = (f))
00089
00090
00091
00092 u8_t udp_lookup (struct ip_hdr *iphdr, struct netif *inp);
00093 void udp_input (struct pbuf *p, struct netif *inp);
00094 void udp_init (void);
00095
00096
00097 #endif
00098
00099