static int _netif_set_addr(kernel_pid_t dev, netopt_t opt, char *addr_str) { uint8_t addr[MAX_ADDR_LEN]; size_t addr_len = gnrc_netif_addr_from_str(addr, sizeof(addr), addr_str); if (addr_len == 0) { puts("error: unable to parse address.\n" "Must be of format [0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*\n" "(hex pairs delimited by colons)"); return 1; } if (gnrc_netapi_set(dev, opt, 0, addr, addr_len) < 0) { printf("error: unable to set "); _print_netopt(opt); puts(""); return 1; } printf("success: set "); _print_netopt(opt); printf(" on interface %" PRIkernel_pid " to %s\n", dev, addr_str); return 0; }
static int _netif_set_encrypt(kernel_pid_t dev, netopt_t opt, char *encrypt_str) { netopt_enable_t set; size_t size = 1; if ((strcmp("on", encrypt_str) == 0) || (strcmp("ON", encrypt_str) == 0)) { set = NETOPT_ENABLE; } else if ((strcmp("off", encrypt_str) == 0) || (strcmp("OFF", encrypt_str) == 0)) { set = NETOPT_DISABLE; } else { puts("usage: ifconfig <if_id> set encryption [on|off]"); return 1; } if (gnrc_netapi_set(dev, opt, 0, &set, size) < 0) { printf("error: unable to set "); _print_netopt(opt); puts(""); return 1; } printf("success: set "); _print_netopt(opt); printf(" on interface %" PRIkernel_pid " to %s\n", dev, encrypt_str); return 0; }
static int _netif_set_encrypt_key(kernel_pid_t dev, netopt_t opt, char *key_str) { size_t str_len = strlen(key_str); size_t key_len = str_len / 2; uint8_t key[key_len]; if (str_len == 14U) { printf("\nNotice: setting 56 bit key."); } else if (str_len == 16U) { printf("\nNotice: setting 64 bit key."); } else if (str_len == 32U) { printf("\nNotice: setting 128 bit key."); } else if (str_len == 48U) { printf("\nNotice: setting 192 bit key."); } else if (str_len == 64U) { printf("\nNotice: setting 256 bit key."); } else if (str_len == 128U) { printf("\nNotice: setting 512 bit key."); } else { printf("error: invalid key size.\n"); return 1; } /* Convert any char from ASCII table in hex format */ for (size_t i = 0; i < str_len; i += 2) { int i1 = _hex_to_int(key_str[i]); int i2 = _hex_to_int(key_str[i + 1]); if (i1 == -1 || i2 == -1) { puts("error: unable to parse key"); return 1; } key[i / 2] = (uint8_t)((i1 << 4) + i2); } if (gnrc_netapi_set(dev, opt, 0, key, key_len) < 0) { printf("error: unable to set "); _print_netopt(opt); puts(""); return 1; } printf("success: set "); _print_netopt(opt); printf(" on interface %" PRIkernel_pid " to \n", dev); for (size_t i = 0; i < key_len; i++) { /* print the hex value of the key */ printf("%02x", key[i]); } puts(""); return 0; }
static int _netif_set_u16(kernel_pid_t iface, netopt_t opt, uint16_t context, char *u16_str) { unsigned long int res; bool hex = false; if (_is_number(u16_str)) { if ((res = strtoul(u16_str, NULL, 10)) == ULONG_MAX) { puts("error: unable to parse value.\n" "Must be a 16-bit unsigned integer (dec or hex)\n"); return 1; } } else { if ((res = strtoul(u16_str, NULL, 16)) == ULONG_MAX) { puts("error: unable to parse value.\n" "Must be a 16-bit unsigned integer (dec or hex)\n"); return 1; } hex = true; } if (res > 0xffff) { puts("error: unable to parse value.\n" "Must be a 16-bit unsigned integer (dec or hex)\n"); return 1; } if (gnrc_netapi_set(iface, opt, context, (uint16_t *)&res, sizeof(uint16_t)) < 0) { printf("error: unable to set "); _print_netopt(opt); puts(""); return 1; } printf("success: set "); _print_netopt(opt); printf(" on interface %" PRIkernel_pid " to ", iface); if (hex) { printf("0x%04lx\n", res); } else { printf("%lu\n", res); } return 0; }
static int _netif_set_i16(kernel_pid_t dev, netopt_t opt, char *i16_str) { int16_t val = (int16_t)atoi(i16_str); if (gnrc_netapi_set(dev, opt, 0, (int16_t *)&val, sizeof(int16_t)) < 0) { printf("error: unable to set "); _print_netopt(opt); puts(""); return 1; } printf("success: set "); _print_netopt(opt); printf(" on interface %" PRIkernel_pid " to %i\n", dev, val); return 0; }
static int _netif_set_u8(kernel_pid_t iface, netopt_t opt, uint16_t context, char *u8_str) { uint8_t val = atoi(u8_str); if (gnrc_netapi_set(iface, opt, context, (uint8_t *)&val, sizeof(uint8_t)) < 0) { printf("error: unable to set "); _print_netopt(opt); puts(""); return 1; } printf("success: set "); _print_netopt(opt); printf(" on interface %" PRIkernel_pid " to %i\n", iface, val); return 0; }