void WiFiDrv::getSubnetMask(IPAddress &mask) { getNetworkData(_localIp, _subnetMask, _gatewayIp); mask = _subnetMask; }
void WiFiDrv::getGatewayIP(IPAddress &ip) { getNetworkData(_localIp, _subnetMask, _gatewayIp); ip = _gatewayIp; }
ipmi_ret_t ipmi_transport_get_lan(ipmi_netfn_t netfn, ipmi_cmd_t cmd, ipmi_request_t request, ipmi_response_t response, ipmi_data_len_t data_len, ipmi_context_t context) { ipmi_ret_t rc = IPMI_CC_OK; *data_len = 0; sd_bus *bus = ipmid_get_sd_bus_connection(); sd_bus_message *reply = NULL; sd_bus_error error = SD_BUS_ERROR_NULL; int r = 0; const uint8_t current_revision = 0x11; // Current rev per IPMI Spec 2.0 int i = 0; printf("IPMI GET_LAN\n"); get_lan_t *reqptr = (get_lan_t*) request; if (reqptr->rev_channel & 0x80) // Revision is bit 7 { // Only current revision was requested *data_len = sizeof(current_revision); memcpy(response, ¤t_revision, *data_len); return IPMI_CC_OK; } // TODO Use dbus interface once available. For now use ip cmd. // TODO Add the rest of the parameters, like gateway if (reqptr->parameter == LAN_PARM_INPROGRESS) { uint8_t buf[] = {current_revision, lan_set_in_progress}; *data_len = sizeof(buf); memcpy(response, &buf, *data_len); } else if (reqptr->parameter == LAN_PARM_AUTHSUPPORT) { uint8_t buf[] = {current_revision,0x04}; *data_len = sizeof(buf); memcpy(response, &buf, *data_len); } else if (reqptr->parameter == LAN_PARM_AUTHENABLES) { uint8_t buf[] = {current_revision,0x04,0x04,0x04,0x04,0x04}; *data_len = sizeof(buf); memcpy(response, &buf, *data_len); } else if ((reqptr->parameter == LAN_PARM_IP) || (reqptr->parameter == LAN_PARM_SUBNET) || (reqptr->parameter == LAN_PARM_GATEWAY)) { uint8_t buf[5]; *data_len = sizeof(current_revision); memcpy(buf, ¤t_revision, *data_len); if(getNetworkData(reqptr->parameter, &buf[1]) == IPMI_CC_OK) { *data_len = sizeof(buf); memcpy(response, &buf, *data_len); } else { rc = IPMI_CC_UNSPECIFIED_ERROR; } } else if (reqptr->parameter == LAN_PARM_MAC) { //string to parse: link/ether xx:xx:xx:xx:xx:xx uint8_t buf[7]; char *eaddr1 = NULL; r = sd_bus_call_method(bus, app, obj, ifc, "GetHwAddress", &error, &reply, "s", nwinterface); if(r < 0) { fprintf(stderr, "Failed to call Get Method: %s\n", strerror(-r)); rc = IPMI_CC_UNSPECIFIED_ERROR; goto cleanup; } r = sd_bus_message_read(reply, "s", &eaddr1); if (r < 0) { fprintf(stderr, "Failed to get a response: %s", strerror(-r)); rc = IPMI_CC_UNSPECIFIED_ERROR; goto cleanup; } if (eaddr1 == NULL) { fprintf(stderr, "Failed to get a valid response: %s", strerror(-r)); rc = IPMI_CC_UNSPECIFIED_ERROR; goto cleanup; } memcpy((void*)&buf[0], ¤t_revision, 1); char *tokptr = NULL; char* digit = strtok_r(eaddr1, ":", &tokptr); if (digit == NULL) { fprintf(stderr, "Unexpected MAC format: %s", eaddr1); rc = IPMI_CC_RESPONSE_ERROR; goto cleanup; } i=0; while (digit != NULL) { int resp_byte = strtoul(digit, NULL, 16); memcpy((void*)&buf[i+1], &resp_byte, 1); i++; digit = strtok_r(NULL, ":", &tokptr); } *data_len = sizeof(buf); memcpy(response, &buf, *data_len); } else { fprintf(stderr, "Unsupported parameter 0x%x\n", reqptr->parameter); rc = IPMI_CC_PARM_NOT_SUPPORTED; } cleanup: sd_bus_error_free(&error); reply = sd_bus_message_unref(reply); return rc; }