示例#1
0
void restart_radvd(void)
{
	if (is_lan_radv_on() == 1)
		reload_radvd();
	else
		stop_radvd();
}
示例#2
0
文件: net6.c 项目: jing-git/rt-n56u
void full_restart_ipv6(int ipv6_type_old)
{
	int ipv6_type = get_ipv6_type();
	int ipv6_toggled = ((ipv6_type == IPV6_DISABLED || ipv6_type_old == IPV6_DISABLED) && (ipv6_type != ipv6_type_old)) ? 1 : 0;

	if (ipv6_toggled) {
		stop_lltd();
		stop_httpd();
	}

	stop_upnp();
	stop_radvd();
	stop_dhcp6c();
	stop_dns_dhcpd();

	if (ipv6_type == IPV6_DISABLED) {
		hwnat_configure();
		clear_all_route6();
		clear_all_addr6();
		clear_if_neigh6(IFNAME_BR);
		stop_sit_tunnel();
		reset_lan6_vars();
		reset_wan6_vars();
		control_if_ipv6_all(0);
		update_resolvconf(0, 1);
		restart_firewall();
		start_dns_dhcpd(0);
	} else {
		control_if_ipv6_all(1);
		clear_all_addr6();
		reset_lan6_vars();
		reload_lan_addr6();
		full_restart_wan();
		if (!is_dns_dhcpd_run())
			start_dns_dhcpd(0);
	}

	if (ipv6_toggled) {
		start_httpd(0);
		start_lltd();
	}
}
示例#3
0
void wan6_down(char *wan_ifname)
{
	int ipv6_type;
	char *wan6_ifname;

	ipv6_type = get_ipv6_type();
	if (ipv6_type == IPV6_DISABLED)
		return;

	stop_radvd();
	stop_dhcp6c();
	control_if_ipv6_radv(wan_ifname, 0);
	control_if_ipv6_autoconf(wan_ifname, 0);

	if (ipv6_type == IPV6_6IN4 || ipv6_type == IPV6_6TO4 || ipv6_type == IPV6_6RD)
	{
		wan6_ifname = IFNAME_SIT;
		if (is_interface_exist(IFNAME_SIT))
			doSystem("ip link set dev %s down", IFNAME_SIT);
	}
	else
	{
		wan6_ifname = wan_ifname;
	}

	// clear WAN routes6
	clear_if_route6(wan6_ifname);

	// clear WAN addr6
	clear_if_addr6(wan6_ifname);

	// delete SIT tunnel
	stop_sit_tunnel();

	// clear DNS6 for resolv.conf
	nvram_set("wan0_dns6", "");
}
示例#4
0
void * cli_thread(void * arg)
{
    int fd = (int)arg;
    char buffer[BUF_SIZE];
    size_t blen;
    int i;
    char * p;
    int command = 0;
    int selector = 0;

#define CMD_START   1
#define CMD_STOP    2
#define CMD_GET     3

#define SEL_AN1     1
#define SEL_AN2     2

    for (blen = read(fd, buffer, sizeof(buffer) - 1); blen > 0 && blen < sizeof(buffer); blen = read(fd, buffer, sizeof(buffer) - 1)) {
        buffer[blen] = '\0';
	    debug("Incoming raw command: %s", buffer);
        command = 0;
        selector = 0;
        p = buffer;
        for (i = 0; i < blen; i++) {
            if (buffer[i] == '|' || buffer[i] == '\n') {
                buffer[i] = '\0';
                if (strcmp(p, "START") == 0)
                    command = CMD_START;
                else if (strcmp(p, "STOP") == 0)
                    command = CMD_STOP;
                else if (strcmp(p, "GET") == 0)
                    command = CMD_GET;
                break;
            }
        }
        if (i < blen - 1) {
            p = &buffer[i+1];
            for (i = 0; i < blen; i++) {
                if (buffer[i] == '|' || buffer[i] == '\n') {
                    buffer[i] = '\0';
                }
            }
            if (strcmp(p, "radvd-an1") == 0)
                selector = SEL_AN1;
            else if (strcmp(p, "radvd-an2") == 0)
                selector = SEL_AN2;
        }
    
        if (command == 0 || (selector == 0 && command != CMD_GET)) {
            error(-1, "Invalid command: c %d s %d", command, selector);
            continue;
        }

        debug("Incoming command: %s %s", (command == CMD_START) ? "/start/" : (command == CMD_STOP) ? "/stop/" : "/get/", 
                (selector == SEL_AN1) ? "/AN1/" : (selector == SEL_AN2) ? "/AN2/" : "//");

        switch(command) {
        case CMD_START:
            switch(selector) {
            case SEL_AN1:
                start_radvd(an1_args, &an1_pid);
                break;
            case SEL_AN2:
                start_radvd(an2_args, &an2_pid);
                break;
            }
            break;
        case CMD_STOP:
            switch(selector) {
            case SEL_AN1:
                stop_radvd(&an1_pid);
                break;
            case SEL_AN2:
                stop_radvd(&an2_pid);
                break;
            }
            break;
        case CMD_GET:
            break;
        }
            
        memset(buffer, 0, sizeof(buffer));
        snprintf(buffer, sizeof(buffer), "STATUS|radvd-an1|%s|radvd-an2|%s", 
                (an1_pid == 0) ? "stopped" : "running",
                (an2_pid == 0) ? "stopped" : "running");
        debug("Status after command: %s", buffer);
        write(fd, buffer, strlen(buffer));
    }

    if (blen == 0)
        debug("Connection closed");
    else
        error(blen, "Connection error (read)");

    return NULL;
}