Ejemplo n.º 1
0
static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
{
    struct rtattr **rta = arg;
    struct in_device *in_dev;
    struct ifaddrmsg *ifm = NLMSG_DATA(nlh);
    struct in_ifaddr *ifa, **ifap;

    ASSERT_RTNL();

    if ((in_dev = inetdev_by_index(ifm->ifa_index)) == NULL)
        goto out;
    __in_dev_put(in_dev);

    for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
            ifap = &ifa->ifa_next) {
        if ((rta[IFA_LOCAL - 1] &&
                memcmp(RTA_DATA(rta[IFA_LOCAL - 1]),
                       &ifa->ifa_local, 4)) ||
                (rta[IFA_LABEL - 1] &&
                 rtattr_strcmp(rta[IFA_LABEL - 1], ifa->ifa_label)) ||
                (rta[IFA_ADDRESS - 1] &&
                 (ifm->ifa_prefixlen != ifa->ifa_prefixlen ||
                  !inet_ifa_match(*(u32*)RTA_DATA(rta[IFA_ADDRESS - 1]),
                                  ifa))))
            continue;
        inet_del_ifa(in_dev, ifap, 1);
        return 0;
    }
out:
    return -EADDRNOTAVAIL;
}
Ejemplo n.º 2
0
struct tcf_proto_ops * tcf_proto_lookup_ops(struct rtattr *kind)
{
	struct tcf_proto_ops *t;

	if (kind) {
		for (t = tcf_proto_base; t; t = t->next) {
			if (rtattr_strcmp(kind, t->kind) == 0)
				return t;
		}
	}
	return NULL;
}
Ejemplo n.º 3
0
struct Qdisc_ops *qdisc_lookup_ops(struct rtattr *kind)
{
	struct Qdisc_ops *q;

	if (kind) {
		for (q = qdisc_base; q; q = q->next) {
			if (rtattr_strcmp(kind, q->id) == 0)
				return q;
		}
	}
	return NULL;
}
Ejemplo n.º 4
0
struct tcf_proto_ops * tcf_proto_lookup_ops(struct rtattr *kind)
{
	struct tcf_proto_ops *t = NULL;

	if (kind) {
		read_lock(&cls_mod_lock);
		for (t = tcf_proto_base; t; t = t->next) {
			if (rtattr_strcmp(kind, t->kind) == 0)
				break;
		}
		read_unlock(&cls_mod_lock);
	}
	return t;
}
Ejemplo n.º 5
0
struct Qdisc_ops *qdisc_lookup_ops(struct rtattr *kind)
{
	struct Qdisc_ops *q = NULL;

	if (kind) {
		read_lock(&qdisc_mod_lock);
		for (q = qdisc_base; q; q = q->next) {
			if (rtattr_strcmp(kind, q->id) == 0)
				break;
		}
		read_unlock(&qdisc_mod_lock);
	}
	return q;
}
Ejemplo n.º 6
0
static struct tcf_proto_ops * tcf_proto_lookup_ops(struct rtattr *kind)
{
	struct tcf_proto_ops *t = NULL;

	if (kind) {
		read_lock(&cls_mod_lock);
		for (t = tcf_proto_base; t; t = t->next) {
			if (rtattr_strcmp(kind, t->kind) == 0) {
				if (!try_module_get(t->owner))
					t = NULL;
				break;
			}
		}
		read_unlock(&cls_mod_lock);
	}
	return t;
}
Ejemplo n.º 7
0
/* lookup by rtattr */
static struct tc_action_ops *tc_lookup_action(struct rtattr *kind)
{
	struct tc_action_ops *a = NULL;

	if (kind) {
		read_lock(&act_mod_lock);
		for (a = act_base; a; a = a->next) {
			if (rtattr_strcmp(kind, a->kind) == 0) {
				if (!try_module_get(a->owner)) {
					read_unlock(&act_mod_lock);
					return NULL;
				}
				break;
			}
		}
		read_unlock(&act_mod_lock);
	}
	return a;
}