Contiki BR not executing tcp_ip event,, does'nt goes after PROCESS_YIELD

浪尽此生 提交于 2019-12-11 07:31:43

问题


I'm trying to implement ECC in 6LoWPAN border router. I'm using contiki Wismote motes for all udp_sender.c as sender and the Border router (border_router.c) needs to receive some messages and also reply ECC keys. I have disabled the default server (WITH_WEBSERVER=0) in makefile and enabled debug_print.

udp_sender.c sends messages correctly but the border router doesn't receive messages. Nothing executes after PROCESS_YIELD in border_router.c

while(1) {
     PROCESS_YIELD(); **//Nothing executes from this point**
     if(ev == tcpip_event) {
          tcpip_handler();
     } else if (ev == sensors_event && data == &button_sensor) {
          PRINTF("Initiaing global repair\n");
          rpl_repair_root(RPL_DEFAULT_INSTANCE);
     }
 }

`

#define DEBUG DEBUG_PRINT
#include "net/uip-debug.h"

uint16_t dag_id[] = {0x1111, 0x1100, 0, 0, 0, 0, 0, 0x0011};
static uip_ipaddr_t prefix;
static uint8_t prefix_set;

#define UIP_IP_BUF   ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN])
#define UDP_CLIENT_PORT 8765
#define UDP_SERVER_PORT 5678
static struct uip_udp_conn *server_conn;

PROCESS(border_router_process, "Border router process");
PROCESS(startup_process, "Startup process");

#if WEBSERVER==0
/* No webserver */
AUTOSTART_PROCESSES(&startup_process, &border_router_process);
#elif WEBSERVER>1
/* Use an external webserver application */
#include "webserver-nogui.h"
AUTOSTART_PROCESSES(&border_router_process,&webserver_nogui_process);
#else

#include "httpd-simple.h"

#define WEBSERVER_CONF_LOADTIME 0
#define WEBSERVER_CONF_FILESTATS 0
#define WEBSERVER_CONF_NEIGHBOR_STATUS 0

#define WEBSERVER_CONF_ROUTE_LINKS 0
#if WEBSERVER_CONF_ROUTE_LINKS
#define BUF_USES_STACK 1
#endif

PROCESS ( startup_process, "Statup Process" );
PROCESS(webserver_nogui_process, "Web server");
PROCESS_THREAD(webserver_nogui_process, ev, data)
{
  PROCESS_BEGIN();
  httpd_init();
  while(1) {
    PROCESS_WAIT_EVENT_UNTIL(ev == tcpip_event);
    httpd_appcall(data);
  }
  PROCESS_END();
}
AUTOSTART_PROCESSES(&border_router_process,&webserver_nogui_process, &startup_process);

//webserver codes
/*-----------------------------------------*/
static void 
tcpip_handler(void)
{
  char *appdata;

  if(uip_newdata()) {
    appdata = (char *)uip_appdata;
    appdata[uip_datalen()] = 0;
    PRINTF("DATA recv '%s' from ", appdata);
    PRINTF("%d",
           UIP_IP_BUF->srcipaddr.u8[sizeof(UIP_IP_BUF->srcipaddr.u8) - 1]);
    PRINTF("\n");
#if SERVER_REPLY
    PRINTF("DATA sending reply\n");
    uip_ipaddr_copy(&server_conn->ripaddr, &UIP_IP_BUF->srcipaddr);
    uip_udp_packet_send(server_conn, "Reply", sizeof("Reply"));
    uip_create_unspecified(&server_conn->ripaddr);
#endif
  }
}

PROCESS_THREAD ( startup_process, ev, data )
{
        PROCESS_BEGIN();
    //some ECC codes here
      process_start ( &border_router_process, ev );
        PROCESS_END();
}

PROCESS_THREAD(border_router_process, ev, data)
{
  static struct etimer et;
  rpl_dag_t *dag;

  PROCESS_BEGIN();
  ....
  .....
  server_conn = udp_new(NULL, UIP_HTONS(UDP_CLIENT_PORT), NULL);
  if(server_conn == NULL) {
    PRINTF("No UDP connection available, exiting the process!\n");
    PROCESS_EXIT();
  }
  udp_bind(server_conn, UIP_HTONS(UDP_SERVER_PORT));

  PRINTF("Created a server connection with remote address ");
  PRINT6ADDR(&server_conn->ripaddr);
  PRINTF(" local/remote port %u/%u\n", UIP_HTONS(server_conn->lport),
         UIP_HTONS(server_conn->rport));

  while(1) {
   PROCESS_YIELD();
   //Nothing executes from this point
    if(ev == tcpip_event) {
      tcpip_handler();
    } else if (ev == sensors_event && data == &button_sensor) {
      PRINTF("Initiaing global repair\n");
      rpl_repair_root(RPL_DEFAULT_INSTANCE);
    }
  }
  PROCESS_END();
}

Here is my output

08:46.163   ID:2    Rime started with address 0.0.0.0.0.0.0.2
08:46.174   ID:2    MAC 00:00:00:00:00:00:00:02 Contiki 2.6 started. Node id is set to 2.
08:46.183   ID:2    nullmac nullrdc, channel check rate 128 Hz, radio channel 26
08:46.194   ID:2    Tentative link-local IPv6 address fe80:0000:0000:0000:0200:0000:0000:0002
08:46.199   ID:2    Starting 'UDP client process'
08:46.207   ID:2    ECC INITIALIZED: key bit len: 128 NN_DIGIT_BITS: 16
08:46.660   ID:1    Rime started with address 0.0.0.0.0.0.0.1
08:46.672   ID:1    MAC 00:00:00:00:00:00:00:01 Contiki 2.6 started. Node id is set to 1.
08:46.681   ID:1    nullmac nullrdc, channel check rate 128 Hz, radio channel 26
08:46.693   ID:1    Tentative link-local IPv6 address fe80:0000:0000:0000:0200:0000:0000:0001
08:46.697   ID:1    Starting 'Startup process'
08:46.701   ID:1    Inside STARTUP process
08:46.708   ID:1    ECC INITIALIZED: key bit len: 128 NN_DIGIT_BITS: 16
08:46.711   ID:2    # [1024 bytes, no line ending]:                     ...
08:46.938   ID:2    # [1024 bytes, no line ending]:                     ...

08:49.078   ID:1    # [1024 bytes, no line ending]:                     ...
08:49.207   ID:2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  UDP client process started
08:49.213   ID:2    Client IPv6 addresses: aaaa::200:0:0:2
08:49.215   ID:2    fe80::200:0:0:2
08:49.224   ID:2    Created a connection with the server :: local/remote port 8765/5678
08:49.311   ID:1    # [1024 bytes, no line ending]:                     ...
08:49.545   ID:1    # [1024 bytes, no line ending]:                     ...
08:49.778   ID:1    # [1024 bytes, no line ending]:                     ...
08:50.010   ID:1    # [1024 bytes, no line ending]:                     ...
08:50.242   ID:1    # [1024 bytes, no line ending]:                     ...
08:50.475   ID:1    # [1024 bytes, no line ending]:                     ...
08:50.748   ID:1    # [1024 bytes, no line ending]:                     ...
08:50.751   ID:1    der router process
08:50.756   ID:1    RPL-Border router started
08:50.766   ID:1    ?PGot configuration message of type P
08:50.769   ID:1    Setting prefix aaaa::
08:51.758   ID:1    after PREFIX
08:51.761   ID:1    created a new RPL dag
08:51.765   ID:1    Server IPv6 addresses:
08:51.768   ID:1     aaaa::200:0:0:1
08:51.770   ID:1     fe80::200:0:0:1
08:51.782   ID:1    Created a server connection with remote address :: local/remote port 5678/8765
10:40.719   ID:2    DATA send to 1 'Hello 1'
11:38.321   ID:2    DATA send to 1 'Hello 2'
12:24.887   ID:2    DATA send to 1 'Hello 3'
13:37.051   ID:2    DATA send to 1 'Hello 4'
14:22.934   ID:2    DATA send to 1 'Hello 5'
15:24.160   ID:2    DATA send to 1 'Hello 6'
16:01.856   ID:2    DATA send to 1 'Hello 7'
\\more messages like above

来源:https://stackoverflow.com/questions/57484641/contiki-br-not-executing-tcp-ip-event-doesnt-goes-after-process-yield

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!