Exemplo n.º 1
0
static int link_ifaces(struct netns_entry *root)
{
	struct ovs_bridge *br;
	struct ovs_port *port;
	struct ovs_if *iface;
	struct if_entry *master;
	int err;

	for (br = br_list; br; br = br->next) {
		if (!br->system || !br->system->iface_count)
			return label_add(&root->warnings,
					 "Failed to find main interface for openvswitch bridge %s",
					 br->name);
		if (br->system->iface_count > 1)
			return label_add(&root->warnings,
					 "Main port for openvswitch bridge %s appears to have several interfaces",
					 br->name);
		if ((err = link_iface(br->system->ifaces, root, 1)))
			return err;
		for (port = br->ports; port; port = port->next) {
			if (port == br->system)
				continue;
			master = br->system->ifaces->link;
			if (port->iface_count > 1) {
				port->link = create_iface(port->name, port->bridge->name, root);
				if (!port->link)
					return ENOMEM;
				master_set(master, port->link);
				master = port->link;
				label_port_or_iface(port, port->link);
			}
			for (iface = port->ifaces; iface; iface = iface->next) {
				if ((err = link_iface(iface, root, 0)))
					return err;
				if (!iface->link) {
					iface->link = create_iface(iface->name,
								   iface->port->bridge->name,
								   root);
					if (!iface->link)
						return ENOMEM;
				}

				/* reconnect to the ovs master */
				master_set(master, iface->link);

				label_iface(iface);
				if (port->iface_count == 1)
					label_port_or_iface(port, iface->link);
				if (!strcmp(iface->type, "vxlan"))
					link_vxlan(iface);
				else if (!strcmp(iface->type, "patch")) {
					if ((err = link_patch(iface, root)))
						return err;
				}
			}
		}
	}
	return 0;
}
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 );
}
Exemplo n.º 3
0
static int
create_iface_of_platform(struct of_device* dev, const struct of_match *match)
{
	return create_iface(dev->node, &dev->dev);
}
Exemplo n.º 4
0
static int
create_iface_macio(struct macio_dev* dev, const struct of_match *match)
{
	return create_iface(dev->ofdev.node, &dev->ofdev.dev);
}