int main(int argc, char **argv) { char *devname; char ebuf[PCAP_ERRBUF_SIZE]; char llstr[6 * 3]; const u_char *pload; pcap_t *dev; struct pcap_pkthdr hdr; struct ethhdr *machdr; #if 0 printf("%zu\n", sizeof(*machdr)); return 0; #endif int c = get_program_options(argc, argv, NULL); printf("get_program_options: %d\n", c); return 0; devname = pcap_lookupdev(ebuf); printf("errbuf: %s: %s\n", ebuf, devname); dev = pcap_open_live("enp0s25", PCAP_ERRBUF_SIZE, 1, 2000, ebuf); printf("dev: %p\n", dev); pload = pcap_next(dev, &hdr); ebuf[PCAP_ERRBUF_SIZE - 1] = '\0'; printf("ploadptr: %p, hdrlen: %u\n", pload, hdr.len); machdr = eth_hdr(pload); printf("mac header: src: %s\n", mac_str(machdr->src, llstr)); printf("mac header: dst: %s\n", mac_str(machdr->dst, llstr)); return 0; }
static void print_mac(char *buf, mac_addr *e) { ASSERT_NOT_NULL(buf); ASSERT_NOT_NULL(e); snprintf(buf, macbuf_size, mac_fmt, mac_str(e->a)); }
static int screen_process_form(struct config_screen *screen) { const struct system_info *sysinfo = screen->cui->sysinfo; enum net_conf_type net_conf_type; struct interface_config *iface; bool allow_write, autoboot; char *str, *end; struct config *config; int i, n_boot_opts, rc, idx; unsigned int *order; char mac[20]; config = config_copy(screen, screen->cui->config); talloc_free(config->autoboot_opts); config->n_autoboot_opts = 0; n_boot_opts = widget_subset_get_order(config, &order, screen->widgets.boot_order_f); autoboot = widget_select_get_value(screen->widgets.autoboot_f); config->autoboot_enabled = autoboot && n_boot_opts; config->n_autoboot_opts = n_boot_opts; config->autoboot_opts = talloc_array(config, struct autoboot_option, n_boot_opts); for (i = 0; i < n_boot_opts; i++) { if (order[i] < sysinfo->n_blockdevs) { /* disk uuid */ config->autoboot_opts[i].boot_type = BOOT_DEVICE_UUID; config->autoboot_opts[i].uuid = talloc_strdup(config, sysinfo->blockdevs[order[i]]->uuid); } else if(order[i] < (sysinfo->n_blockdevs + sysinfo->n_interfaces)) { /* net uuid */ order[i] -= sysinfo->n_blockdevs; config->autoboot_opts[i].boot_type = BOOT_DEVICE_UUID; mac_str(sysinfo->interfaces[order[i]]->hwaddr, sysinfo->interfaces[order[i]]->hwaddr_size, mac, sizeof(mac)); config->autoboot_opts[i].uuid = talloc_strdup(config, mac); } else { /* device type */ order[i] -= (sysinfo->n_blockdevs + sysinfo->n_interfaces); config->autoboot_opts[i].boot_type = BOOT_DEVICE_TYPE; config->autoboot_opts[i].type = order[i]; } } str = widget_textbox_get_value(screen->widgets.timeout_f); if (str) { unsigned long x; errno = 0; x = strtoul(str, &end, 10); if (!errno && end != str) config->autoboot_timeout_sec = x; } if (screen->ipmi_override) if (widget_checkbox_get_value(screen->widgets.ipmi_clear_cb)) config->ipmi_bootdev = IPMI_BOOTDEV_INVALID; net_conf_type = widget_select_get_value(screen->widgets.network_f); /* if we don't have any network interfaces, prevent per-interface * configuration */ if (sysinfo->n_interfaces == 0) net_conf_type = NET_CONF_TYPE_DHCP_ALL; if (net_conf_type == NET_CONF_TYPE_DHCP_ALL) { config->network.n_interfaces = 0; } else { iface = talloc_zero(config, struct interface_config); config->network.n_interfaces = 1; config->network.interfaces = talloc_array(config, struct interface_config *, 1); config->network.interfaces[0] = iface; /* copy hwaddr (from the sysinfo interface data) to * the configuration */ idx = widget_select_get_value(screen->widgets.iface_f); memcpy(iface->hwaddr, sysinfo->interfaces[idx]->hwaddr, sizeof(iface->hwaddr)); } if (net_conf_type == NET_CONF_TYPE_DHCP_ONE) { iface->method = CONFIG_METHOD_DHCP; } if (net_conf_type == NET_CONF_TYPE_STATIC) { char *ip, *mask, *gateway, *url; ip = widget_textbox_get_value(screen->widgets.ip_addr_f); mask = widget_textbox_get_value(screen->widgets.ip_mask_f); gateway = widget_textbox_get_value(screen->widgets.gateway_f); url = widget_textbox_get_value(screen->widgets.url_f); if (!ip || !*ip || !mask || !*mask) { screen->scr.frame.status = _("No IP / mask values are set"); nc_scr_frame_draw(&screen->scr); talloc_free(config); return -1; } iface->method = CONFIG_METHOD_STATIC; iface->static_config.address = talloc_asprintf(iface, "%s/%s", ip, mask); iface->static_config.gateway = talloc_strdup(iface, gateway); iface->static_config.url = talloc_strdup(iface, url); } str = widget_textbox_get_value(screen->widgets.dns_f); talloc_free(config->network.dns_servers); config->network.dns_servers = NULL; config->network.n_dns_servers = 0; if (str && strlen(str)) { char *dns, *tmp; int i; for (;;) { dns = strtok_r(str, " \t", &tmp); if (!dns) break; i = config->network.n_dns_servers++; config->network.dns_servers = talloc_realloc(config, config->network.dns_servers, const char *, config->network.n_dns_servers); config->network.dns_servers[i] = talloc_strdup(config, dns); str = NULL; } }