static int _get(netdev2_t *dev, netopt_t opt, void *value, size_t max_len) { if (dev != (netdev2_t *)&netdev2_tap) { return -ENODEV; } int res = 0; switch (opt) { case NETOPT_ADDRESS: if (max_len < ETHERNET_ADDR_LEN) { res = -EINVAL; } else { _get_mac_addr(dev, (uint8_t*)value); res = ETHERNET_ADDR_LEN; } break; case NETOPT_PROMISCUOUSMODE: *((bool*)value) = (bool)_get_promiscous(dev); res = sizeof(bool); break; default: res = netdev2_eth_get(dev, opt, value, max_len); break; } return res; }
int _get(netdev2_t *dev, netopt_t opt, void *value, size_t max_len) { if (dev != (netdev2_t *)&netdev2_tap) { return -ENODEV; } int res = 0; switch (opt) { case NETOPT_DEVICE_TYPE: { uint16_t *tgt = (uint16_t *)value; *tgt = NETDEV2_TYPE_ETHERNET; res = 2; break; } case NETOPT_ADDRESS: if (max_len < ETHERNET_ADDR_LEN) { res = -EINVAL; } else { _get_mac_addr(dev, (uint8_t*)value); res = ETHERNET_ADDR_LEN; } break; case NETOPT_ADDR_LEN: case NETOPT_SRC_LEN: assert(max_len == 2); uint16_t *tgt = (uint16_t*)value; *tgt=6; res = sizeof(uint16_t); break; case NETOPT_PROMISCUOUSMODE: *((bool*)value) = (bool)_get_promiscous(dev); res = sizeof(bool); break; case NETOPT_IPV6_IID: return _get_iid(dev, value, max_len); case NETOPT_IS_WIRED: res = 1; break; default: res = -ENOTSUP; break; } return res; }