Exemplo n.º 1
0
struct knet_cfg *knet_get_iface(const char *name, int create)
{
	struct knet_cfg *knet_iface = knet_cfg_head.knet_cfg;
	int found = 0;

	while (knet_iface != NULL) {
		if (!strcmp(tap_get_name(knet_iface->cfg_eth.tap), name)) {
			found = 1;
			break;
		}
		knet_iface = knet_iface->next;
	}

	if ((!found) && (create)) {
		knet_iface = malloc(sizeof(struct knet_cfg));
		if (!knet_iface)
			goto out_clean;

		memset(knet_iface, 0, sizeof(struct knet_cfg));

		knet_iface->cfg_ring.base_port = KNET_RING_DEFPORT;

		knet_iface->next = knet_cfg_head.knet_cfg;
		knet_cfg_head.knet_cfg = knet_iface;
	}

out_clean:

	return knet_iface;
}
Exemplo n.º 2
0
void
init_ifs (char *dev, char *vnet)
{
	char cmd[256], ifname[256];

	ip_iface = (struct iface_ether *) create_iface (vnet, NULL, NULL);
	if (!ip_iface) {
		fprintf (stderr, "Unable to create 802.IP interface.\n");
		exit (1);
	}
	ip_iface->recv_frame = handle_802ip_frame;
	printf ("address %02x:%02x:%02x:%02x:%02x:%02x\n",
		ip_iface->hwaddr[0], ip_iface->hwaddr[1],
		ip_iface->hwaddr[2], ip_iface->hwaddr[3], ip_iface->hwaddr[4], ip_iface->hwaddr[5]);
	tap_iface = (struct iface_ether *) create_iface ("tap", dev, NULL);
	if (!tap_iface) {
		fprintf (stderr, "Unable to create ethertap interface.\n");
		exit (1);
	}
	tap_iface->recv_frame = handle_tap_frame;

	if (tap_iface->head_size > ip_iface->head_size)
		ip_iface->head_size = tap_iface->head_size;
	if (ip_iface->head_size > tap_iface->head_size)
		tap_iface->head_size = ip_iface->head_size;

	tap_get_name ((struct iface *) tap_iface, ifname);
	printf ("Tunnel: %s\n", ifname);
	sprintf (cmd,
		 "/sbin/ip link set %s address %02x:%02x:%02x:%02x:%02x:%02x up\n",
		 ifname, ip_iface->hwaddr[0], ip_iface->hwaddr[1],
		 ip_iface->hwaddr[2], ip_iface->hwaddr[3], ip_iface->hwaddr[4], ip_iface->hwaddr[5]);
	printf ("command: %s\n", cmd);
	system (cmd);
	//sprintf( cmd, "/sbin/ip addr add fe80::1/64 dev %s", ifname );
	//printf( "command: %s\n", cmd );
	//system( cmd );
	//sprintf( cmd, "/sbin/ip route add %s/%d dev %s via fe80::5", prefix, plen, ifname );
	//printf( "command: %s\n", cmd );
	//system( cmd );
}