static PT_THREAD(generate_config(struct httpd_state *s)) { PSOCK_BEGIN(&s->sout); add("<form action=\"config\" method=\"get\">"); add("<h2>WSN Network</h2>"); #if !CETIC_6LBR_ONE_ITF add("<h3>802.15.4 configuration</h3>"); INPUT_INT("channel", channel, "Channel"); #if !CONTIKI_TARGET_NATIVE INPUT_HEX("panid", pan_id, "PAN ID"); #endif SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>802.15.4 Security</h3>"); add("Link-layer security : <select name=\"llsec\">"); SELECT_OPTION(security_layer, CETIC_6LBR_SECURITY_LAYER_NONE, "None"); SELECT_OPTION(security_layer, CETIC_6LBR_SECURITY_LAYER_NONCORESEC, "Pre-shared Key"); add("</select><br />"); SEND_STRING(&s->sout, buf); reset_buf(); add("Link-layer security level : <select name=\"llsec_level\">"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_NO_SECURITY, "No Security"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CBC_MAC_32, "AES-CBC-MAC-32"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CBC_MAC_64, "AES-CBC-MAC-64"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CBC_MAC_128, "AES-CBC-MAC-128"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CTR, "AES-CTR"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CCM_32 , "AES-CCM-32"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CCM_64 , "AES-CCM-64"); SELECT_OPTION(security_level, CETIC_6LBR_SECURITY_LEVEL_AES_CCM_128, "AES-CCM-128"); add("</select><br />"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_KEY("psk", noncoresec_key, 16, "Pre-shared key"); INPUT_FLAG_CB("sec_dis_ar", noncoresec_flags, CETIC_6LBR_NONCORESEC_DISABLE_ANTIREPLAY, "Disable anti-replay"); INPUT_FLAG_CB("sec_ar_wa", noncoresec_flags, CETIC_6LBR_NONCORESEC_ANTIREPLAY_WORKAROUND, "Enable anti-replay workaround"); SEND_STRING(&s->sout, buf); reset_buf(); #if CETIC_6LBR_MAC_WRAPPER add("<br /><h3>MAC</h3>"); add("MAC Layer : <select name=\"mac\">"); SELECT_OPTION(mac_layer, CETIC_6LBR_MAC_LAYER_NONE, "None"); SELECT_OPTION(mac_layer, CETIC_6LBR_MAC_LAYER_CSMA, "CSMA"); add("</select><br />"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #endif add("<br /><h3>IP configuration</h3>"); #if CETIC_6LBR_SMARTBRIDGE || CETIC_6LBR_TRANSPARENTBRIDGE INPUT_FLAG_CB("wait_ra", mode, CETIC_MODE_WAIT_RA_MASK, "Network autoconfiguration"); INPUT_IPADDR("wsn_pre", wsn_net_prefix, "Prefix"); INPUT_INT("wsn_pre_len", wsn_net_prefix_len, "Prefix length"); INPUT_IPADDR("eth_dft", eth_dft_router, "Default router"); SEND_STRING(&s->sout, buf); reset_buf(); #elif CETIC_6LBR_ROUTER INPUT_IPADDR("wsn_pre", wsn_net_prefix, "Prefix"); INPUT_INT("wsn_pre_len", wsn_net_prefix_len, "Prefix length"); #endif INPUT_CONTEXT("wsn_context_0", wsn_6lowpan_context_0, "6LoPWAN context 0"); INPUT_FLAG_CB("wsn_auto", mode, CETIC_MODE_WSN_AUTOCONF, "Address autoconfiguration"); INPUT_IPADDR("wsn_addr", wsn_ip_addr, "Manual address"); SEND_STRING(&s->sout, buf); reset_buf(); add("<h3>Extra configuration</h3>"); #if CETIC_6LBR_SMARTBRIDGE INPUT_FLAG_CB("smart_multi", mode, CETIC_MODE_SMART_MULTI_BR, "Multi-BR support"); #endif INPUT_IPADDR("dns", dns_server, "DNS server"); #if CETIC_NODE_CONFIG INPUT_FLAG_CB("nc_filter", global_flags, CETIC_GLOBAL_FILTER_NODES, "Filter nodes"); #endif SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h2>Eth Network</h2>"); #if CETIC_6LBR_ROUTER add("<h3>IP configuration</h3>"); INPUT_IPADDR("eth_pre", eth_net_prefix, "Prefix"); INPUT_INT("eth_pre_len", eth_net_prefix_len, "Prefix length"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_FLAG_CB("eth_auto", mode, CETIC_MODE_ETH_AUTOCONF, "Address autoconfiguration" ); INPUT_IPADDR("eth_addr", eth_ip_addr, "Manual address"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_IPADDR("eth_dft", eth_dft_router, "Peer router"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if CETIC_6LBR_IP64 add("<br /><h3>IP64</h3>"); INPUT_FLAG_CB("ip64", global_flags, CETIC_GLOBAL_IP64, "IP64" ); INPUT_FLAG_CB("ip64_dhcp", eth_ip64_flags, CETIC_6LBR_IP64_DHCP, "DHCP" ); INPUT_IP4ADDR("ip64_addr", eth_ip64_addr, "Address"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_IP4ADDR("ip64_netmask", eth_ip64_netmask, "Netmask"); INPUT_IP4ADDR("ip64_gateway", eth_ip64_gateway, "Gateway"); INPUT_FLAG_CB("ip64_6052", eth_ip64_flags, CETIC_6LBR_IP64_RFC6052_PREFIX, "RFC 6052 prefix" ); INPUT_FLAG_CB("ip64_port_map", eth_ip64_flags, CETIC_6LBR_IP64_SPECIAL_PORTS, "Static port mapping" ); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if RESOLV_CONF_SUPPORTS_MDNS add("<br /><h3>MDNS</h3>"); INPUT_FLAG_CB("mdns", global_flags, CETIC_GLOBAL_MDNS, "MDNS publishing" ); INPUT_STRING("hostname", dns_host_name, NVM_DATA_DNS_HOST_NAME_SIZE, "Hostname"); #if RESOLV_CONF_SUPPORTS_DNS_SD INPUT_FLAG_CB("dns_sd", dns_flags, CETIC_6LBR_DNS_DNS_SD, "DNS-SD publishing" ); #endif SEND_STRING(&s->sout, buf); reset_buf(); #endif #if CETIC_6LBR_ROUTER add("<br /><h2>RA Daemon</h2>"); INPUT_FLAG("ra_daemon", mode, CETIC_MODE_ROUTER_RA_DAEMON, "RA Daemon", "active", "inactive"); INPUT_INT("ra_lifetime", ra_router_lifetime, "Router lifetime"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>RA</h3>"); INPUT_INT( "ra_max_interval", ra_max_interval, "Max interval"); INPUT_INT( "ra_min_interval", ra_min_interval, "Min interval"); INPUT_INT( "ra_min_delay", ra_min_delay, "Min delay"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>RA Prefix</h3>"); INPUT_FLAG_CB( "ra_pio", ra_prefix_flags, CETIC_6LBR_MODE_SEND_PIO, "Send Prefix Information"); INPUT_FLAG_CB( "ra_prefix_o", ra_prefix_flags, UIP_ND6_RA_FLAG_ONLINK, "Prefix on-link"); INPUT_FLAG_CB( "ra_prefix_a", ra_prefix_flags, UIP_ND6_RA_FLAG_AUTONOMOUS, "Allow autoconfiguration"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_INT( "ra_prefix_vtime", ra_prefix_vtime, "Prefix valid time"); INPUT_INT( "ra_prefix_ptime", ra_prefix_ptime, "Prefix preferred time"); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>RA Route Information</h3>"); INPUT_FLAG_CB( "ra_rio_en", ra_rio_flags, CETIC_6LBR_MODE_SEND_RIO, "Include RIO"); INPUT_INT( "ra_rio_lifetime", ra_rio_lifetime, "Route lifetime"); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if UIP_CONF_IPV6_RPL && (CETIC_6LBR_ROUTER || CETIC_6LBR_SMARTBRIDGE) add("<br /><h2>RPL Configuration</h2>"); INPUT_INT( "rpl_instance_id", rpl_instance_id, "Instance ID"); INPUT_FLAG_CB( "dodag_manual", rpl_config, CETIC_6LBR_MODE_MANUAL_DODAG, "Manual DODAG ID"); INPUT_IPADDR("dodag_id", rpl_dodag_id, "DODAG ID"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_FLAG_CB( "dodag_global", rpl_config, CETIC_6LBR_MODE_GLOBAL_DODAG, "Global DODAG ID"); INPUT_INT( "rpl_preference", rpl_preference, "Preference"); INPUT_INT( "rpl_dio_intdoubl", rpl_dio_intdoubl, "DIO interval doubling"); INPUT_INT( "rpl_dio_intmin", rpl_dio_intmin, "DIO min interval"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_INT( "rpl_dio_redundancy", rpl_dio_redundancy, "DIO redundancy"); INPUT_INT( "rpl_min_hoprankinc", rpl_min_hoprankinc, "Min rank increment"); INPUT_INT( "rpl_max_rankinc", rpl_max_rankinc, "Max rank increase"); INPUT_INT( "rpl_default_lifetime", rpl_default_lifetime, "Route lifetime"); INPUT_INT( "rpl_lifetime_unit", rpl_lifetime_unit, "Route lifetime unit"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if CETIC_6LBR_ROUTER add("<br /><h2>Packet filtering</h2>"); INPUT_FLAG("rewrite", mode, CETIC_MODE_REWRITE_ADDR_MASK, "Address rewrite", "enabled", "disabled"); #endif if ((nvm_data.global_flags & CETIC_GLOBAL_DISABLE_CONFIG) == 0) { add("<br /><input type=\"submit\" value=\"Submit\"/></form>"); } SEND_STRING(&s->sout, buf); reset_buf(); PSOCK_END(&s->sout); }
static PT_THREAD(generate_config(struct httpd_state *s)) { #if BUF_USES_STACK char buf[BUF_SIZE]; #endif #if WEBSERVER_CONF_LOADTIME static clock_time_t numticks; numticks = clock_time(); #endif PSOCK_BEGIN(&s->sout); SEND_STRING(&s->sout, TOP); SEND_STRING(&s->sout, BODY); reset_buf(); add_div_home("Configuration"); add("<div id=\"left_home\"><form action=\"config\" method=\"get\">"); add("<h2>WSN Network</h2>"); add("<h3>WSN configuration</h3>"); INPUT_INT("channel", channel, "Channel"); SEND_STRING(&s->sout, buf); reset_buf(); add("<h3>IP configuration</h3>"); #if CETIC_6LBR_SMARTBRIDGE || CETIC_6LBR_TRANSPARENTBRIDGE #if CETIC_6LBR_SMARTBRIDGE INPUT_FLAG_CB("smart_multi", mode, CETIC_MODE_SMART_MULTI_BR, "Multi-BR support"); #endif INPUT_FLAG_CB("wait_ra", mode, CETIC_MODE_WAIT_RA_MASK, "Network autoconfiguration"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_IPADDR("wsn_pre", wsn_net_prefix, "Prefix"); INPUT_INT("wsn_pre_len", wsn_net_prefix_len, "Prefix length"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_IPADDR("eth_dft", eth_dft_router, "Default router"); #elif CETIC_6LBR_ROUTER INPUT_IPADDR("wsn_pre", wsn_net_prefix, "Prefix"); INPUT_INT("wsn_pre_len", wsn_net_prefix_len, "Prefix length"); #endif SEND_STRING(&s->sout, buf); reset_buf(); INPUT_FLAG_CB("wsn_auto", mode, CETIC_MODE_WSN_AUTOCONF, "Address autoconfiguration"); INPUT_IPADDR("wsn_addr", wsn_ip_addr, "Manual address"); SEND_STRING(&s->sout, buf); reset_buf(); #if CETIC_6LBR_ROUTER add("<br /><h2>Eth Network</h2>"); add("<h3>IP configuration</h3>"); INPUT_IPADDR("eth_pre", eth_net_prefix, "Prefix"); INPUT_INT("eth_pre_len", eth_net_prefix_len, "Prefix length"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_FLAG_CB("eth_auto", mode, CETIC_MODE_ETH_AUTOCONF, "Address autoconfiguration" ); INPUT_IPADDR("eth_addr", eth_ip_addr, "Manual address"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_IPADDR("eth_dft", eth_dft_router, "Peer router"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h2>RA Daemon</h2>"); INPUT_FLAG("ra_daemon", mode, CETIC_MODE_ROUTER_RA_DAEMON, "RA Daemon", "active", "inactive"); INPUT_INT("ra_lifetime", ra_router_lifetime, "Router lifetime"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>RA</h3>"); INPUT_INT( "ra_max_interval", ra_max_interval, "Max interval"); INPUT_INT( "ra_min_interval", ra_min_interval, "Min interval"); INPUT_INT( "ra_min_delay", ra_min_delay, "Min delay"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>RA Prefix</h3>"); INPUT_FLAG_CB( "ra_pio", ra_prefix_flags, CETIC_6LBR_MODE_SEND_PIO, "Send Prefix Information"); INPUT_FLAG_CB( "ra_prefix_o", ra_prefix_flags, UIP_ND6_RA_FLAG_ONLINK, "Prefix on-link"); INPUT_FLAG_CB( "ra_prefix_a", ra_prefix_flags, UIP_ND6_RA_FLAG_AUTONOMOUS, "Allow autoconfiguration"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_INT( "ra_prefix_vtime", ra_prefix_vtime, "Prefix valid time"); INPUT_INT( "ra_prefix_ptime", ra_prefix_ptime, "Prefix preferred time"); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); add("<br /><h3>RA Route Information</h3>"); INPUT_FLAG_CB( "ra_rio_en", ra_rio_flags, CETIC_6LBR_MODE_SEND_RIO, "Include RIO"); INPUT_INT( "ra_rio_lifetime", ra_rio_lifetime, "Route lifetime"); add("<br />"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if UIP_CONF_IPV6_RPL && (CETIC_6LBR_ROUTER || CETIC_6LBR_SMARTBRIDGE) add("<br /><h2>RPL Configuration</h2>"); INPUT_INT( "rpl_instance_id", rpl_instance_id, "Instance ID"); INPUT_INT( "rpl_preference", rpl_preference, "Preference"); INPUT_INT( "rpl_dio_intdoubl", rpl_dio_intdoubl, "DIO interval doubling"); INPUT_INT( "rpl_dio_intmin", rpl_dio_intmin, "DIO min interval"); SEND_STRING(&s->sout, buf); reset_buf(); INPUT_INT( "rpl_dio_redundancy", rpl_dio_redundancy, "DIO redundancy"); INPUT_INT( "rpl_min_hoprankinc", rpl_min_hoprankinc, "Min rank increment"); INPUT_INT( "rpl_default_lifetime", rpl_default_lifetime, "Route lifetime"); INPUT_INT( "rpl_lifetime_unit", rpl_lifetime_unit, "Route lifetime unit"); SEND_STRING(&s->sout, buf); reset_buf(); #endif #if CETIC_6LBR_ROUTER add("<br /><h2>Packet filtering</h2>"); INPUT_FLAG("rewrite", mode, CETIC_MODE_REWRITE_ADDR_MASK, "Address rewrite", "enabled", "disabled"); #endif if ((nvm_data.global_flags & CETIC_GLOBAL_DISABLE_CONFIG) == 0) { add("<br /><input type=\"submit\" value=\"Submit\"/></form>"); } SEND_STRING(&s->sout, buf); reset_buf(); add_div_footer(); #if WEBSERVER_CONF_FILESTATS static uint16_t numtimes; add("<br><i>This page sent %u times</i>", ++numtimes); #endif #if WEBSERVER_CONF_LOADTIME numticks = clock_time() - numticks + 1; add(" <i>(%u.%02u sec)</i>", numticks / CLOCK_SECOND, (100 * (numticks % CLOCK_SECOND) / CLOCK_SECOND)); #endif add("</div></div>"); SEND_STRING(&s->sout, buf); SEND_STRING(&s->sout, BOTTOM); PSOCK_END(&s->sout); }