Ejemplo n.º 1
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);
}
Ejemplo n.º 2
0
void f_route_del_v6(struct cli_conn *conn, const char *s)
{
	uint8_t dst6[16];
	uint8_t gw6[16];
	int 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 = last;
	if (tk == tk_end) {
		ofp_sendf(conn->fd, "Invalid IP6NET\r\n");
		sendcrlf(conn);
		return;
	}

	mlen = atoi(tk);

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

	sendcrlf(conn);
}
Ejemplo n.º 3
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);
}