52#if LWIP_IPV6 && LWIP_UDP
61#define ZEPIF_LOOPBACK 0
64#define ZEP_MAX_DATA_LEN 127
66#ifdef PACK_STRUCT_USE_INCLUDES
84#ifdef PACK_STRUCT_USE_INCLUDES
89 struct zepif_init
init;
94static u8_t zep_lowpan_timer_running;
98zep_lowpan_timer(
void *
arg)
101 if (zep_lowpan_timer_running) {
102 sys_timeout(LOWPAN6_TMR_INTERVAL, zep_lowpan_timer,
arg);
108zepif_udp_recv(
void *
arg,
struct udp_pcb *pcb,
struct pbuf *
p,
125 if (
p->len <
sizeof(
struct zep_hdr)) {
129 zep = (
struct zep_hdr *)
p->payload;
130 if (zep->prot_id[0] !=
'E') {
133 if (zep->prot_id[1] !=
'X') {
136 if (zep->prot_version != 2) {
140 if (zep->type != 1) {
143 if (zep->crc_mode != 1) {
146 if (zep->len !=
p->tot_len -
sizeof(
struct zep_hdr)) {
158 err = netif_lowpan6->
input(
p, netif_lowpan6);
173 struct zepif_state *
state;
178 if (
p->tot_len > ZEP_MAX_DATA_LEN) {
190 zep = (
struct zep_hdr *)
q->payload;
191 memset(zep, 0,
sizeof(
struct zep_hdr));
192 zep->prot_id[0] =
'E';
193 zep->prot_id[1] =
'X';
194 zep->prot_version = 2;
199 zep->unknown_1 = 0xff;
202 zep->len = (
u8_t)
p->tot_len;
209 err = udp_sendto(
state->pcb,
q,
state->init.zep_dst_ip_addr,
state->init.zep_dst_udp_port);
225 struct zepif_init *init_state = (
struct zepif_init *)
netif->
state;
226 struct zepif_state *
state = (
struct zepif_state *)
mem_malloc(
sizeof(
struct zepif_state));
234 if (init_state !=
NULL) {
235 memcpy(&
state->init, init_state,
sizeof(
struct zepif_init));
237 if (
state->init.zep_src_udp_port == 0) {
238 state->init.zep_src_udp_port = ZEPIF_DEFAULT_UDP_PORT;
240 if (
state->init.zep_dst_udp_port == 0) {
241 state->init.zep_dst_udp_port = ZEPIF_DEFAULT_UDP_PORT;
244 if (
state->init.zep_dst_ip_addr ==
NULL) {
246 state->init.zep_dst_ip_addr = IP_ADDR_BROADCAST;
257 err = udp_bind(
state->pcb,
state->init.zep_src_ip_addr,
state->init.zep_src_udp_port);
262 udp_bind_netif(
state->pcb,
state->init.zep_netif);
273 if (init_state !=
NULL) {
277 for (
i = 0;
i < 6;
i++) {
284 if (!zep_lowpan_timer_running) {
285 sys_timeout(LOWPAN6_TMR_INTERVAL, zep_lowpan_timer,
NULL);
286 zep_lowpan_timer_running = 1;
294 udp_remove(
state->pcb);
#define mem_free(ptr, bsize)
#define PACK_STRUCT_STRUCT
void * mem_malloc(mem_size_t size_in)
#define LWIP_ASSERT(message, assertion)
#define ip_set_option(pcb, opt)
GLuint GLuint GLsizei GLenum type
GLdouble GLdouble GLdouble GLdouble q
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define LWIP_UNUSED_ARG(x)
#define PACK_STRUCT_BEGIN
#define PACK_STRUCT_FLD_8(x)
#define PACK_STRUCT_FIELD(x)
void pbuf_realloc(struct pbuf *p, u16_t new_len)
struct pbuf * pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)
u8_t pbuf_free(struct pbuf *p)
struct pbuf * pbuf_clone(pbuf_layer layer, pbuf_type type, struct pbuf *p)
err_t pbuf_copy_partial_pbuf(struct pbuf *p_to, const struct pbuf *p_from, u16_t copy_len, u16_t offset)
#define memcpy(s1, s2, n)
u8_t pbuf_remove_header(struct pbuf *p, size_t header_size_decrement)
u8_t hwaddr[NETIF_MAX_HWADDR_LEN]
netif_linkoutput_fn linkoutput