Example #1
0
/* "ifconfig [-A inet 4] DEV IP4NET";*/
void f_ifconfig(struct cli_conn *conn, const char *s)
{

	char dev[16];
	int port, a, b, c, d, m, vlan, vrf = 0;
	uint32_t addr;
	const char *err;

	if (sscanf(s, "%s %d.%d.%d.%d/%d %d", dev, &a, &b,
		&c, &d, &m, &vrf) < 6)
		return;
	addr = odp_cpu_to_be_32((a << 24) | (b << 16) | (c << 8) | d);
	port = ofp_name_to_port_vlan(dev, &vlan);

	if (port == GRE_PORTS || port == VXLAN_PORTS) {
		ofp_sendf(conn->fd, "Invalid device name.\r\n");
		return;
	}

	if (PHYS_PORT(port))
		err = ofp_config_interface_up_v4(port, vlan, vrf,
						 addr, m);
	else
		err = ofp_config_interface_up_local(vlan, vrf,
						    addr, m);
	if (err != NULL)
		ofp_sendf(conn->fd, err);
	sendcrlf(conn);
}
Example #2
0
/* route -A inet4 add vrf NUMBER IP4NET gw IP4ADDR dev DEV */
void f_route_add_vrf(struct cli_conn *conn, const char *s)
{
	uint32_t gwaddr, destaddr;
	int a, b, c, d, e, f, g, h, port, mlen, vrf, vlan;
	char dev[16];

	if (sscanf(s, "%d %d.%d.%d.%d/%d %d.%d.%d.%d %s",
		   &vrf, &a, &b, &c, &d, &mlen,
		   &e, &f, &g, &h, dev) != 11)
		return;
	destaddr = odp_cpu_to_be_32((a << 24) | (b << 16) | (c << 8) | d);
	gwaddr = odp_cpu_to_be_32((e << 24) | (f << 16) | (g << 8) | h);

	port = ofp_name_to_port_vlan(dev, &vlan);
	if (port < 0 || port >= ofp_get_num_ports()) {
		ofp_sendf(conn->fd, "Invalid port!\r\n");
		sendcrlf(conn);
		return;
	}

	ofp_set_route_params(OFP_ROUTE_ADD, vrf, vlan, port, destaddr,
			     mlen, gwaddr);

	sendcrlf(conn);
}
Example #3
0
void f_ifconfig_v6(struct cli_conn *conn, const char *s)
{
	char dev[16];
	uint8_t addr6[16];
	int prefix, port, vlan;
	const char *tk;
	const char *tk_end;
	const char *err;

	/*get DEV*/
	tk = s;
	tk_end = strstr(tk, " ");

	if (!tk_end || ((int)(tk_end - tk) > (int)(sizeof(dev) - 1))) {
		ofp_sendf(conn->fd, "Invalid device name.\r\n");
		sendcrlf(conn);
		return;
	}
	memcpy(dev, tk, tk_end - tk);
	dev[tk_end - tk] = 0;

	port = ofp_name_to_port_vlan(dev, &vlan);
	if (port == -1 || port == GRE_PORTS) {
		ofp_sendf(conn->fd, "Invalid device name.\r\n");
		sendcrlf(conn);
		return;
	}

	/*get IP6NET address*/
	tk = tk_end + 1;
	tk_end = strstr(tk, "/");

	if (!tk_end || tk_end - tk > 40) {
		ofp_sendf(conn->fd, "Invalid IP6NET address.\r\n");
		sendcrlf(conn);
		return;
	}

	if (!ip6addr_get(tk, tk_end - tk, addr6)) {
		ofp_sendf(conn->fd, "Invalid IP6NET address.\r\n");
		sendcrlf(conn);
		return;
	}

	/* get IP6NET prefix len*/
	tk = tk_end + 1;
	if (sscanf(tk, "%d", &prefix) < 1) {
		ofp_sendf(conn->fd, "Invalid IP6NET prefix.\r\n");
		sendcrlf(conn);
		return;
	}

	if (port == LOCAL_PORTS)
		err = ofp_config_interface_up_local_v6(vlan, addr6, prefix);
	else
		err = ofp_config_interface_up_v6(port, vlan, addr6, prefix);
	if (err != NULL)
		ofp_sendf(conn->fd, err);
	sendcrlf(conn);
}
Example #4
0
/* "ifconfig tunnel gre DEV local IP4ADDR remote IP4ADDR peer IP4ADDR IP4ADDR vrf NUMBER";*/
void f_ifconfig_tun(struct cli_conn *conn, const char *s)
{
	char dev[16], loc[16], rem[16], ip[16], peer[16];
	uint32_t tun_loc, tun_rem, addr, p2p;
	int port, vlan, vrf = 0, masklen = 32;
	const char *err;

	if (sscanf(s, "%s %s %s %s %s %d", dev, loc, rem, peer, ip, &vrf) < 5)
		return;

	port = ofp_name_to_port_vlan(dev, &vlan);

	if (port != GRE_PORTS) {
		ofp_sendf(conn->fd, "Invalid device name.\r\n");
		sendcrlf(conn);
		return;
	}

	if (!ip4addr_get(loc, &tun_loc))
		return;
	if (!ip4addr_get(rem, &tun_rem))
		return;
	if (!ip4addr_get(peer, &p2p))
		return;
	if (!ip4addr_get(ip, &addr))
		return;


	err = ofp_config_interface_up_tun(port, vlan, vrf, tun_loc, tun_rem,
					    p2p, addr, masklen);
	if (err != NULL)
		ofp_sendf(conn->fd, err);
	sendcrlf(conn);
}
Example #5
0
/* route add from DEV to DEV */
void f_route_add_dev_to_dev(struct cli_conn *conn, const char *s)
{

	char dev[16], from[16];
	int from_port, to_port, vlan;

	if (sscanf(s, "%s %s", from, dev) != 2)
		return;
	from_port = ofp_name_to_port_vlan(from, &vlan);
	to_port = ofp_name_to_port_vlan(dev, &vlan);
	from_port = from_port; /* remove warnings*/
	to_port = to_port;
	/*set_port_params(16, ofp_ifnet_data[32].address,
	  ufp_ifnet_data[32].masklen, ufp_ifnet_data[32].mac,
	  ufp_ifnet_data[32].link_local);
	add_to_next_hop_table(ADD_ENTRY, ufp_ifnet_data[to_port].address,
	from_port, ufp_ifnet_data[to_port].masklen,
	  NH_FLAGS_TO_LOCAL_SEGMENT, to_port, 0, to_port, NULL, 0);*/
	sendcrlf(conn);
}
Example #6
0
/* ifconfig vxlan DEV group IP4ADDR dev DEV IP4NET */
void f_ifconfig_vxlan(struct cli_conn *conn, const char *s)
{
	char dev[16], physdev[16], group[16];
	uint32_t vxlan_group, addr;
	int n, port, vlan, physport, physvlan, a, b, c, d, m;
	const char *err;

	if ((n = sscanf(s, "%s %s %s %d.%d.%d.%d/%d",
			dev, group, physdev,
			&a, &b, &c, &d, &m)) != 8) {
		return;
	}

	addr = odp_cpu_to_be_32((a << 24) | (b << 16) | (c << 8) | d);
	port = ofp_name_to_port_vlan(dev, &vlan);

	if (port != VXLAN_PORTS) {
		ofp_sendf(conn->fd, "Invalid device name %s.\r\n", dev);
		sendcrlf(conn);
		return;
	}

	physport = ofp_name_to_port_vlan(physdev, &physvlan);

	if (!ip4addr_get(group, &vxlan_group)) {
		ofp_sendf(conn->fd, "Invalid group address.\r\n");
		sendcrlf(conn);
		return;
	}

	/* vrf is copied from the physical port */
	err = ofp_config_interface_up_vxlan(0, addr, m, vlan, vxlan_group,
					    physport, physvlan);
	if (err != NULL)
		ofp_sendf(conn->fd, err);

	sendcrlf(conn);
}
Example #7
0
void f_ifconfig_down(struct cli_conn *conn, const char *s)
{
	/* "ifconfig DEV down"; */
	char dev[16];
	int port, vlan;
	const char *err;

	if (sscanf(s, "%s", dev) < 1)
		return;
	port = ofp_name_to_port_vlan(dev, &vlan);

	err = ofp_config_interface_down(port, vlan);

	if (err != NULL)
		ofp_sendf(conn->fd, err);
	sendcrlf(conn);
}
Example #8
0
void f_route_add_v6(struct cli_conn *conn, const char *s)
{
	uint8_t dst6[16];
	uint8_t gw6[16];
	int port, vlan, mlen;
	const char *tk;
	const char *tk_end;
	const char *last;

	last = s + strlen(s);

/* get IP6NET address*/
	tk = s;
	tk_end = strstr(tk, "/");
	if (!tk_end) {
		ofp_sendf(conn->fd, "Invalid IP6NET\r\n");
		sendcrlf(conn);
		return;
	}

	if (!ip6addr_get(tk, tk_end - tk, dst6)) {
		ofp_sendf(conn->fd, "Invalid IP6NET\r\n");
		sendcrlf(conn);
		return;
	}

/* get IP6NET prefix len*/
	tk = tk_end + 1;
	if (tk >= last) {
		ofp_sendf(conn->fd, "Invalid IP6NET\r\n");
		sendcrlf(conn);
		return;
	}

	tk_end = strstr(tk, " ");
	if (!tk_end || (tk == tk_end)) {
		ofp_sendf(conn->fd, "Invalid IP6NET\r\n");
		sendcrlf(conn);
		return;
	}

	mlen = atoi(tk);

/* get IP6ADDR */
	tk = tk_end + 1;
	if (tk >= last) {
		ofp_sendf(conn->fd, "Invalid IP6NET\r\n");
		sendcrlf(conn);
		return;
	}
	tk_end = strstr(tk, " ");
	if (tk_end == NULL) {
		ofp_sendf(conn->fd, "Invalid IP6ADDR\r\n");
		sendcrlf(conn);
		return;
	}

	if (!ip6addr_get(tk, tk_end - tk, gw6)) {
		ofp_sendf(conn->fd, "Invalid IP6NET\r\n");
		sendcrlf(conn);
		return;
	}

/* get DEV */
	tk = tk_end + 1;
	if (tk >= last) {
		ofp_sendf(conn->fd, "Invalid DEV\r\n");
		sendcrlf(conn);
		return;
	}
	tk_end = last;

	port = ofp_name_to_port_vlan(tk, &vlan);
	if (port < 0 || port >= ofp_get_num_ports()) {
		ofp_sendf(conn->fd, "Invalid port!\r\n");
		sendcrlf(conn);
		return;
	}

	ofp_set_route6_params(OFP_ROUTE6_ADD, 0 /*vrf*/, vlan, port, dst6,
			      mlen, gw6);

	sendcrlf(conn);
}