mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Conflicts: net/netfilter/core.c net/netfilter/nf_tables_netdev.c Resolve two conflicts before pull request for David's net-next tree: 1) Betweenc73c248490("netfilter: nf_tables_netdev: remove redundant ip_hdr assignment") from the net tree and commitddc8b6027a("netfilter: introduce nft_set_pktinfo_{ipv4, ipv6}_validate()"). 2) Betweene8bffe0cf9("net: Add _nf_(un)register_hooks symbols") and Aaron Conole's patches to replace list_head with single linked list. Signed-off-by: Pablo Neira Ayuso <[email protected]>
This commit is contained in:
commit
f20fbc0717
1352 changed files with 49627 additions and 17803 deletions
|
|
@ -80,13 +80,10 @@ static void br_do_proxy_arp(struct sk_buff *skb, struct net_bridge *br,
|
|||
|
||||
BR_INPUT_SKB_CB(skb)->proxyarp_replied = false;
|
||||
|
||||
if (dev->flags & IFF_NOARP)
|
||||
if ((dev->flags & IFF_NOARP) ||
|
||||
!pskb_may_pull(skb, arp_hdr_len(dev)))
|
||||
return;
|
||||
|
||||
if (!pskb_may_pull(skb, arp_hdr_len(dev))) {
|
||||
dev->stats.tx_dropped++;
|
||||
return;
|
||||
}
|
||||
parp = arp_hdr(skb);
|
||||
|
||||
if (parp->ar_pro != htons(ETH_P_IP) ||
|
||||
|
|
|
|||
|
|
@ -1138,7 +1138,7 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,
|
|||
} else {
|
||||
err = br_ip6_multicast_add_group(br, port,
|
||||
&grec->grec_mca, vid);
|
||||
if (!err)
|
||||
if (err)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,17 +134,36 @@ void br_stp_disable_port(struct net_bridge_port *p)
|
|||
br_become_root_bridge(br);
|
||||
}
|
||||
|
||||
static int br_stp_call_user(struct net_bridge *br, char *arg)
|
||||
{
|
||||
char *argv[] = { BR_STP_PROG, br->dev->name, arg, NULL };
|
||||
char *envp[] = { NULL };
|
||||
int rc;
|
||||
|
||||
/* call userspace STP and report program errors */
|
||||
rc = call_usermodehelper(BR_STP_PROG, argv, envp, UMH_WAIT_PROC);
|
||||
if (rc > 0) {
|
||||
if (rc & 0xff)
|
||||
br_debug(br, BR_STP_PROG " received signal %d\n",
|
||||
rc & 0x7f);
|
||||
else
|
||||
br_debug(br, BR_STP_PROG " exited with code %d\n",
|
||||
(rc >> 8) & 0xff);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void br_stp_start(struct net_bridge *br)
|
||||
{
|
||||
int r;
|
||||
char *argv[] = { BR_STP_PROG, br->dev->name, "start", NULL };
|
||||
char *envp[] = { NULL };
|
||||
struct net_bridge_port *p;
|
||||
int err = -ENOENT;
|
||||
|
||||
if (net_eq(dev_net(br->dev), &init_net))
|
||||
r = call_usermodehelper(BR_STP_PROG, argv, envp, UMH_WAIT_PROC);
|
||||
else
|
||||
r = -ENOENT;
|
||||
err = br_stp_call_user(br, "start");
|
||||
|
||||
if (err && err != -ENOENT)
|
||||
br_err(br, "failed to start userspace STP (%d)\n", err);
|
||||
|
||||
spin_lock_bh(&br->lock);
|
||||
|
||||
|
|
@ -153,9 +172,10 @@ static void br_stp_start(struct net_bridge *br)
|
|||
else if (br->bridge_forward_delay > BR_MAX_FORWARD_DELAY)
|
||||
__br_set_forward_delay(br, BR_MAX_FORWARD_DELAY);
|
||||
|
||||
if (r == 0) {
|
||||
if (!err) {
|
||||
br->stp_enabled = BR_USER_STP;
|
||||
br_debug(br, "userspace STP started\n");
|
||||
|
||||
/* Stop hello and hold timers */
|
||||
del_timer(&br->hello_timer);
|
||||
list_for_each_entry(p, &br->port_list, list)
|
||||
|
|
@ -173,14 +193,13 @@ static void br_stp_start(struct net_bridge *br)
|
|||
|
||||
static void br_stp_stop(struct net_bridge *br)
|
||||
{
|
||||
int r;
|
||||
char *argv[] = { BR_STP_PROG, br->dev->name, "stop", NULL };
|
||||
char *envp[] = { NULL };
|
||||
struct net_bridge_port *p;
|
||||
int err;
|
||||
|
||||
if (br->stp_enabled == BR_USER_STP) {
|
||||
r = call_usermodehelper(BR_STP_PROG, argv, envp, UMH_WAIT_PROC);
|
||||
br_info(br, "userspace STP stopped, return code %d\n", r);
|
||||
err = br_stp_call_user(br, "stop");
|
||||
if (err)
|
||||
br_err(br, "failed to stop userspace STP (%d)\n", err);
|
||||
|
||||
/* To start timers on any ports left in blocking */
|
||||
mod_timer(&br->hello_timer, jiffies + br->hello_time);
|
||||
|
|
|
|||
|
|
@ -368,6 +368,8 @@ ebt_check_match(struct ebt_entry_match *m, struct xt_mtchk_param *par,
|
|||
|
||||
match = xt_find_match(NFPROTO_BRIDGE, m->u.name, 0);
|
||||
if (IS_ERR(match) || match->family != NFPROTO_BRIDGE) {
|
||||
if (!IS_ERR(match))
|
||||
module_put(match->me);
|
||||
request_module("ebt_%s", m->u.name);
|
||||
match = xt_find_match(NFPROTO_BRIDGE, m->u.name, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ static const struct nft_expr_ops nft_meta_bridge_set_ops = {
|
|||
.init = nft_meta_set_init,
|
||||
.destroy = nft_meta_set_destroy,
|
||||
.dump = nft_meta_set_dump,
|
||||
.validate = nft_meta_set_validate,
|
||||
};
|
||||
|
||||
static const struct nft_expr_ops *
|
||||
|
|
|
|||
Loading…
Reference in a new issue