Beispiel #1
0
int
iface_gre_del(const char *gre_iface)
{
    struct softgred_config *cfg = softgred_config_ref();
    int ret;
    errno = 0;

    if ((ret=rtnl_open(&cfg->rth, 0)) < 0)
    {
        D_DEBUG1("Cannot open rtnetlink\n");
        return EXIT_FAILURE;
    }

    if(!iplink_have_newlink())
    {
        D_DEBUG1("iplink_have_newlink ret=%d strerror='%s'\n", ret, strerror(errno));
    }
    else
    {
        ret = iplink_modify(RTM_DELLINK, 0, gre_iface, NULL, NULL, NULL, NULL);
        if (ret != 0)
        {
            D_DEBUG1("iplink_modify(RTM_DELLINK) ret=%d strerror='%s'\n", ret, strerror(errno));
        }
    }

    rtnl_close(&cfg->rth);

    return 1;
}
Beispiel #2
0
int do_iplink(int argc, char **argv)
{
	if (argc > 0) {
		if (iplink_have_newlink()) {
			if (matches(*argv, "add") == 0)
				return iplink_modify(RTM_NEWLINK,
						     NLM_F_CREATE|NLM_F_EXCL,
						     argc-1, argv+1);
			if (matches(*argv, "set") == 0 ||
			    matches(*argv, "change") == 0)
				return iplink_modify(RTM_NEWLINK, 0,
						     argc-1, argv+1);
			if (matches(*argv, "replace") == 0)
				return iplink_modify(RTM_NEWLINK,
						     NLM_F_CREATE|NLM_F_REPLACE,
						     argc-1, argv+1);
			if (matches(*argv, "delete") == 0)
				return iplink_modify(RTM_DELLINK, 0,
						     argc-1, argv+1);
		} else {
#if IPLINK_IOCTL_COMPAT
			if (matches(*argv, "set") == 0)
				return do_set(argc-1, argv+1);
#endif
		}
		if (matches(*argv, "show") == 0 ||
		    matches(*argv, "lst") == 0 ||
		    matches(*argv, "list") == 0)
			return ipaddr_list_link(argc-1, argv+1);
		if (matches(*argv, "help") == 0)
			usage();
	} else
		return ipaddr_list_link(0, NULL);

	fprintf(stderr, "Command \"%s\" is unknown, try \"ip link help\".\n", *argv);
	exit(-1);
}
Beispiel #3
0
int
iface_gre_add(const char *gre_iface,
              const char *type,
              const char *dev_to_link,
              const struct in_addr *in_local,
              const struct in_addr *in_remote)
{
    struct softgred_config *cfg = softgred_config_ref();
    int ret = true;
    char *ip_local = strdupa(inet_ntoa(*in_local));
    char *ip_remote = strdupa(inet_ntoa(*in_remote));

    D_DEBUG1("Creating gre-interface '%s' { .local='%s', .remote='%s' }\n", 
            gre_iface, ip_local, ip_remote
    );

    if ((ret=rtnl_open(&cfg->rth, 0)) < 0)
    {
        D_DEBUG1("rtnl_open ret=%d strerror='%s'\n", ret, strerror(errno));
        return EXIT_FAILURE;
    }

    if (!iplink_have_newlink())
    {
        D_DEBUG1("iplink_have_newlink ret=%d strerror='%s'\n", ret, strerror(errno));
    }
    else
    {
        ret = iplink_modify(RTM_NEWLINK,
                            NLM_F_CREATE | NLM_F_EXCL,
                            gre_iface,
                            dev_to_link,
                            type,
                            in_local,
                            in_remote);
        if (ret != 0)
            D_DEBUG2("iplink_modify(RTM_NEWLINK) ret=%d strerror='%s'\n", ret, strerror(errno));
    }

    rtnl_close(&cfg->rth);

    return 1;
}