Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes and cleanups from David Miller: 1) Revert bogus nla_ok() change, from Alexey Dobriyan. 2) Various bpf validator fixes from Daniel Borkmann. 3) Add some necessary SET_NETDEV_DEV() calls to hsis_femac and hip04 drivers, from Dongpo Li. 4) Several ethtool ksettings conversions from Philippe Reynes. 5) Fix bugs in inet port management wrt. soreuseport, from Tom Herbert. 6) XDP support for virtio_net, from John Fastabend. 7) Fix NAT handling within a vrf, from David Ahern. 8) Endianness fixes in dpaa_eth driver, from Claudiu Manoil * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (63 commits) net: mv643xx_eth: fix build failure isdn: Constify some function parameters mlxsw: spectrum: Mark split ports as such cgroup: Fix CGROUP_BPF config qed: fix old-style function definition net: ipv6: check route protocol when deleting routes r6040: move spinlock in r6040_close as SOFTIRQ-unsafe lock order detected irda: w83977af_ir: cleanup an indent issue net: sfc: use new api ethtool_{get|set}_link_ksettings net: davicom: dm9000: use new api ethtool_{get|set}_link_ksettings net: cirrus: ep93xx: use new api ethtool_{get|set}_link_ksettings net: chelsio: cxgb3: use new api ethtool_{get|set}_link_ksettings net: chelsio: cxgb2: use new api ethtool_{get|set}_link_ksettings bpf: fix mark_reg_unknown_value for spilled regs on map value marking bpf: fix overflow in prog accounting bpf: dynamically allocate digest scratch buffer gtp: Fix initialization of Flags octet in GTPv1 header gtp: gtp_check_src_ms_ipv4() always return success net/x25: use designated initializers isdn: use designated initializers ...
This commit is contained in:
@@ -111,9 +111,9 @@ static inline void lec_arp_put(struct lec_arp_table *entry)
|
||||
}
|
||||
|
||||
static struct lane2_ops lane2_ops = {
|
||||
lane2_resolve, /* resolve, spec 3.1.3 */
|
||||
lane2_associate_req, /* associate_req, spec 3.1.4 */
|
||||
NULL /* associate indicator, spec 3.1.5 */
|
||||
.resolve = lane2_resolve, /* spec 3.1.3 */
|
||||
.associate_req = lane2_associate_req, /* spec 3.1.4 */
|
||||
.associate_indicator = NULL /* spec 3.1.5 */
|
||||
};
|
||||
|
||||
static unsigned char bus_mac[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||
|
@@ -535,33 +535,32 @@ static void eg_destroy_cache(struct mpoa_client *mpc)
|
||||
|
||||
|
||||
static const struct in_cache_ops ingress_ops = {
|
||||
in_cache_add_entry, /* add_entry */
|
||||
in_cache_get, /* get */
|
||||
in_cache_get_with_mask, /* get_with_mask */
|
||||
in_cache_get_by_vcc, /* get_by_vcc */
|
||||
in_cache_put, /* put */
|
||||
in_cache_remove_entry, /* remove_entry */
|
||||
cache_hit, /* cache_hit */
|
||||
clear_count_and_expired, /* clear_count */
|
||||
check_resolving_entries, /* check_resolving */
|
||||
refresh_entries, /* refresh */
|
||||
in_destroy_cache /* destroy_cache */
|
||||
.add_entry = in_cache_add_entry,
|
||||
.get = in_cache_get,
|
||||
.get_with_mask = in_cache_get_with_mask,
|
||||
.get_by_vcc = in_cache_get_by_vcc,
|
||||
.put = in_cache_put,
|
||||
.remove_entry = in_cache_remove_entry,
|
||||
.cache_hit = cache_hit,
|
||||
.clear_count = clear_count_and_expired,
|
||||
.check_resolving = check_resolving_entries,
|
||||
.refresh = refresh_entries,
|
||||
.destroy_cache = in_destroy_cache
|
||||
};
|
||||
|
||||
static const struct eg_cache_ops egress_ops = {
|
||||
eg_cache_add_entry, /* add_entry */
|
||||
eg_cache_get_by_cache_id, /* get_by_cache_id */
|
||||
eg_cache_get_by_tag, /* get_by_tag */
|
||||
eg_cache_get_by_vcc, /* get_by_vcc */
|
||||
eg_cache_get_by_src_ip, /* get_by_src_ip */
|
||||
eg_cache_put, /* put */
|
||||
eg_cache_remove_entry, /* remove_entry */
|
||||
update_eg_cache_entry, /* update */
|
||||
clear_expired, /* clear_expired */
|
||||
eg_destroy_cache /* destroy_cache */
|
||||
.add_entry = eg_cache_add_entry,
|
||||
.get_by_cache_id = eg_cache_get_by_cache_id,
|
||||
.get_by_tag = eg_cache_get_by_tag,
|
||||
.get_by_vcc = eg_cache_get_by_vcc,
|
||||
.get_by_src_ip = eg_cache_get_by_src_ip,
|
||||
.put = eg_cache_put,
|
||||
.remove_entry = eg_cache_remove_entry,
|
||||
.update = update_eg_cache_entry,
|
||||
.clear_expired = clear_expired,
|
||||
.destroy_cache = eg_destroy_cache
|
||||
};
|
||||
|
||||
|
||||
void atm_mpoa_init_cache(struct mpoa_client *mpc)
|
||||
{
|
||||
mpc->in_ops = &ingress_ops;
|
||||
|
@@ -2972,6 +2972,12 @@ void bpf_warn_invalid_xdp_action(u32 act)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bpf_warn_invalid_xdp_action);
|
||||
|
||||
void bpf_warn_invalid_xdp_buffer(void)
|
||||
{
|
||||
WARN_ONCE(1, "Illegal XDP buffer encountered, expect throughput degradation\n");
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bpf_warn_invalid_xdp_buffer);
|
||||
|
||||
static u32 sk_filter_convert_ctx_access(enum bpf_access_type type, int dst_reg,
|
||||
int src_reg, int ctx_off,
|
||||
struct bpf_insn *insn_buf,
|
||||
|
@@ -201,7 +201,7 @@ static struct dn_dev_sysctl_table {
|
||||
.extra1 = &min_t3,
|
||||
.extra2 = &max_t3
|
||||
},
|
||||
{0}
|
||||
{ }
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -45,11 +45,12 @@ void inet_get_local_port_range(struct net *net, int *low, int *high)
|
||||
EXPORT_SYMBOL(inet_get_local_port_range);
|
||||
|
||||
int inet_csk_bind_conflict(const struct sock *sk,
|
||||
const struct inet_bind_bucket *tb, bool relax)
|
||||
const struct inet_bind_bucket *tb, bool relax,
|
||||
bool reuseport_ok)
|
||||
{
|
||||
struct sock *sk2;
|
||||
int reuse = sk->sk_reuse;
|
||||
int reuseport = sk->sk_reuseport;
|
||||
bool reuse = sk->sk_reuse;
|
||||
bool reuseport = !!sk->sk_reuseport && reuseport_ok;
|
||||
kuid_t uid = sock_i_uid((struct sock *)sk);
|
||||
|
||||
/*
|
||||
@@ -105,6 +106,7 @@ int inet_csk_get_port(struct sock *sk, unsigned short snum)
|
||||
struct inet_bind_bucket *tb;
|
||||
kuid_t uid = sock_i_uid(sk);
|
||||
u32 remaining, offset;
|
||||
bool reuseport_ok = !!snum;
|
||||
|
||||
if (port) {
|
||||
have_port:
|
||||
@@ -165,7 +167,8 @@ other_parity_scan:
|
||||
smallest_size = tb->num_owners;
|
||||
smallest_port = port;
|
||||
}
|
||||
if (!inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb, false))
|
||||
if (!inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb, false,
|
||||
reuseport_ok))
|
||||
goto tb_found;
|
||||
goto next_port;
|
||||
}
|
||||
@@ -206,13 +209,14 @@ tb_found:
|
||||
sk->sk_reuseport && uid_eq(tb->fastuid, uid))) &&
|
||||
smallest_size == -1)
|
||||
goto success;
|
||||
if (inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb, true)) {
|
||||
if (inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb, true,
|
||||
reuseport_ok)) {
|
||||
if ((reuse ||
|
||||
(tb->fastreuseport > 0 &&
|
||||
sk->sk_reuseport &&
|
||||
!rcu_access_pointer(sk->sk_reuseport_cb) &&
|
||||
uid_eq(tb->fastuid, uid))) &&
|
||||
smallest_size != -1 && --attempts >= 0) {
|
||||
!snum && smallest_size != -1 && --attempts >= 0) {
|
||||
spin_unlock_bh(&head->lock);
|
||||
goto again;
|
||||
}
|
||||
|
@@ -29,11 +29,12 @@
|
||||
#include <net/sock_reuseport.h>
|
||||
|
||||
int inet6_csk_bind_conflict(const struct sock *sk,
|
||||
const struct inet_bind_bucket *tb, bool relax)
|
||||
const struct inet_bind_bucket *tb, bool relax,
|
||||
bool reuseport_ok)
|
||||
{
|
||||
const struct sock *sk2;
|
||||
int reuse = sk->sk_reuse;
|
||||
int reuseport = sk->sk_reuseport;
|
||||
bool reuse = !!sk->sk_reuse;
|
||||
bool reuseport = !!sk->sk_reuseport && reuseport_ok;
|
||||
kuid_t uid = sock_i_uid((struct sock *)sk);
|
||||
|
||||
/* We must walk the whole port owner list in this case. -DaveM */
|
||||
|
@@ -2174,6 +2174,8 @@ static int ip6_route_del(struct fib6_config *cfg)
|
||||
continue;
|
||||
if (cfg->fc_metric && cfg->fc_metric != rt->rt6i_metric)
|
||||
continue;
|
||||
if (cfg->fc_protocol && cfg->fc_protocol != rt->rt6i_protocol)
|
||||
continue;
|
||||
dst_hold(&rt->dst);
|
||||
read_unlock_bh(&table->tb6_lock);
|
||||
|
||||
|
@@ -245,7 +245,6 @@
|
||||
#include <linux/tty.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/capability.h>
|
||||
#include <linux/ctype.h> /* isspace() */
|
||||
|
@@ -15,13 +15,10 @@
|
||||
/***************************** INCLUDES *****************************/
|
||||
|
||||
#include "irnet.h" /* Module global include */
|
||||
#include <linux/miscdevice.h>
|
||||
|
||||
/************************ CONSTANTS & MACROS ************************/
|
||||
|
||||
/* /dev/irnet file constants */
|
||||
#define IRNET_MAJOR 10 /* Misc range */
|
||||
#define IRNET_MINOR 187 /* Official allocation */
|
||||
|
||||
/* IrNET control channel stuff */
|
||||
#define IRNET_MAX_COMMAND 256 /* Max length of a command line */
|
||||
|
||||
@@ -111,9 +108,9 @@ static const struct file_operations irnet_device_fops =
|
||||
/* Structure so that the misc major (drivers/char/misc.c) take care of us... */
|
||||
static struct miscdevice irnet_misc_device =
|
||||
{
|
||||
IRNET_MINOR,
|
||||
"irnet",
|
||||
&irnet_device_fops
|
||||
.minor = IRNET_MINOR,
|
||||
.name = "irnet",
|
||||
.fops = &irnet_device_fops
|
||||
};
|
||||
|
||||
#endif /* IRNET_PPP_H */
|
||||
|
@@ -23,7 +23,6 @@
|
||||
*
|
||||
********************************************************************/
|
||||
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/module.h>
|
||||
|
@@ -265,7 +265,8 @@ static void __ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata,
|
||||
if (uni) {
|
||||
rcu_assign_pointer(sdata->default_unicast_key, key);
|
||||
ieee80211_check_fast_xmit_iface(sdata);
|
||||
drv_set_default_unicast_key(sdata->local, sdata, idx);
|
||||
if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN)
|
||||
drv_set_default_unicast_key(sdata->local, sdata, idx);
|
||||
}
|
||||
|
||||
if (multi)
|
||||
|
@@ -2472,7 +2472,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
|
||||
if (!ifmsh->mshcfg.dot11MeshForwarding)
|
||||
goto out;
|
||||
|
||||
fwd_skb = skb_copy(skb, GFP_ATOMIC);
|
||||
fwd_skb = skb_copy_expand(skb, local->tx_headroom, 0, GFP_ATOMIC);
|
||||
if (!fwd_skb) {
|
||||
net_info_ratelimited("%s: failed to clone mesh frame\n",
|
||||
sdata->name);
|
||||
|
@@ -1972,6 +1972,7 @@ static void sta_stats_decode_rate(struct ieee80211_local *local, u16 rate,
|
||||
u16 brate;
|
||||
unsigned int shift;
|
||||
|
||||
rinfo->flags = 0;
|
||||
sband = local->hw.wiphy->bands[(rate >> 4) & 0xf];
|
||||
brate = sband->bitrates[rate & 0xf].bitrate;
|
||||
if (rinfo->bw == RATE_INFO_BW_5)
|
||||
@@ -1987,14 +1988,15 @@ static void sta_stats_decode_rate(struct ieee80211_local *local, u16 rate,
|
||||
rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
|
||||
}
|
||||
|
||||
static void sta_set_rate_info_rx(struct sta_info *sta, struct rate_info *rinfo)
|
||||
static int sta_set_rate_info_rx(struct sta_info *sta, struct rate_info *rinfo)
|
||||
{
|
||||
u16 rate = ACCESS_ONCE(sta_get_last_rx_stats(sta)->last_rate);
|
||||
|
||||
if (rate == STA_STATS_RATE_INVALID)
|
||||
rinfo->flags = 0;
|
||||
else
|
||||
sta_stats_decode_rate(sta->local, rate, rinfo);
|
||||
return -EINVAL;
|
||||
|
||||
sta_stats_decode_rate(sta->local, rate, rinfo);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sta_set_tidstats(struct sta_info *sta,
|
||||
@@ -2199,8 +2201,8 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
|
||||
}
|
||||
|
||||
if (!(sinfo->filled & BIT(NL80211_STA_INFO_RX_BITRATE))) {
|
||||
sta_set_rate_info_rx(sta, &sinfo->rxrate);
|
||||
sinfo->filled |= BIT(NL80211_STA_INFO_RX_BITRATE);
|
||||
if (sta_set_rate_info_rx(sta, &sinfo->rxrate) == 0)
|
||||
sinfo->filled |= BIT(NL80211_STA_INFO_RX_BITRATE);
|
||||
}
|
||||
|
||||
sinfo->filled |= BIT(NL80211_STA_INFO_TID_STATS);
|
||||
|
@@ -252,7 +252,7 @@ static int fl_hw_replace_filter(struct tcf_proto *tp,
|
||||
offload.cookie = (unsigned long)f;
|
||||
offload.dissector = dissector;
|
||||
offload.mask = mask;
|
||||
offload.key = &f->key;
|
||||
offload.key = &f->mkey;
|
||||
offload.exts = &f->exts;
|
||||
|
||||
tc->type = TC_SETUP_CLSFLOWER;
|
||||
@@ -509,6 +509,7 @@ static int fl_set_key(struct net *net, struct nlattr **tb,
|
||||
|
||||
if (tb[TCA_FLOWER_KEY_IPV4_SRC] || tb[TCA_FLOWER_KEY_IPV4_DST]) {
|
||||
key->control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
|
||||
mask->control.addr_type = ~0;
|
||||
fl_set_key_val(tb, &key->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC,
|
||||
&mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK,
|
||||
sizeof(key->ipv4.src));
|
||||
@@ -517,6 +518,7 @@ static int fl_set_key(struct net *net, struct nlattr **tb,
|
||||
sizeof(key->ipv4.dst));
|
||||
} else if (tb[TCA_FLOWER_KEY_IPV6_SRC] || tb[TCA_FLOWER_KEY_IPV6_DST]) {
|
||||
key->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
|
||||
mask->control.addr_type = ~0;
|
||||
fl_set_key_val(tb, &key->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC,
|
||||
&mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK,
|
||||
sizeof(key->ipv6.src));
|
||||
@@ -571,6 +573,7 @@ static int fl_set_key(struct net *net, struct nlattr **tb,
|
||||
if (tb[TCA_FLOWER_KEY_ENC_IPV4_SRC] ||
|
||||
tb[TCA_FLOWER_KEY_ENC_IPV4_DST]) {
|
||||
key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
|
||||
mask->enc_control.addr_type = ~0;
|
||||
fl_set_key_val(tb, &key->enc_ipv4.src,
|
||||
TCA_FLOWER_KEY_ENC_IPV4_SRC,
|
||||
&mask->enc_ipv4.src,
|
||||
@@ -586,6 +589,7 @@ static int fl_set_key(struct net *net, struct nlattr **tb,
|
||||
if (tb[TCA_FLOWER_KEY_ENC_IPV6_SRC] ||
|
||||
tb[TCA_FLOWER_KEY_ENC_IPV6_DST]) {
|
||||
key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
|
||||
mask->enc_control.addr_type = ~0;
|
||||
fl_set_key_val(tb, &key->enc_ipv6.src,
|
||||
TCA_FLOWER_KEY_ENC_IPV6_SRC,
|
||||
&mask->enc_ipv6.src,
|
||||
|
@@ -331,7 +331,9 @@ struct sctp_association *sctp_endpoint_lookup_assoc(
|
||||
* on this endpoint.
|
||||
*/
|
||||
if (!ep->base.bind_addr.port)
|
||||
goto out;
|
||||
return NULL;
|
||||
|
||||
rcu_read_lock();
|
||||
t = sctp_epaddr_lookup_transport(ep, paddr);
|
||||
if (!t)
|
||||
goto out;
|
||||
@@ -339,6 +341,7 @@ struct sctp_association *sctp_endpoint_lookup_assoc(
|
||||
*transport = t;
|
||||
asoc = t->asoc;
|
||||
out:
|
||||
rcu_read_unlock();
|
||||
return asoc;
|
||||
}
|
||||
|
||||
|
@@ -4472,18 +4472,17 @@ int sctp_transport_lookup_process(int (*cb)(struct sctp_transport *, void *),
|
||||
const union sctp_addr *paddr, void *p)
|
||||
{
|
||||
struct sctp_transport *transport;
|
||||
int err = -ENOENT;
|
||||
int err;
|
||||
|
||||
rcu_read_lock();
|
||||
transport = sctp_addrs_lookup_transport(net, laddr, paddr);
|
||||
if (!transport)
|
||||
goto out;
|
||||
|
||||
rcu_read_unlock();
|
||||
if (!transport)
|
||||
return -ENOENT;
|
||||
|
||||
err = cb(transport, p);
|
||||
sctp_transport_put(transport);
|
||||
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sctp_transport_lookup_process);
|
||||
|
@@ -662,19 +662,19 @@ static void vmci_transport_notify_pkt_process_negotiate(struct sock *sk)
|
||||
|
||||
/* Socket control packet based operations. */
|
||||
const struct vmci_transport_notify_ops vmci_transport_notify_pkt_ops = {
|
||||
vmci_transport_notify_pkt_socket_init,
|
||||
vmci_transport_notify_pkt_socket_destruct,
|
||||
vmci_transport_notify_pkt_poll_in,
|
||||
vmci_transport_notify_pkt_poll_out,
|
||||
vmci_transport_notify_pkt_handle_pkt,
|
||||
vmci_transport_notify_pkt_recv_init,
|
||||
vmci_transport_notify_pkt_recv_pre_block,
|
||||
vmci_transport_notify_pkt_recv_pre_dequeue,
|
||||
vmci_transport_notify_pkt_recv_post_dequeue,
|
||||
vmci_transport_notify_pkt_send_init,
|
||||
vmci_transport_notify_pkt_send_pre_block,
|
||||
vmci_transport_notify_pkt_send_pre_enqueue,
|
||||
vmci_transport_notify_pkt_send_post_enqueue,
|
||||
vmci_transport_notify_pkt_process_request,
|
||||
vmci_transport_notify_pkt_process_negotiate,
|
||||
.socket_init = vmci_transport_notify_pkt_socket_init,
|
||||
.socket_destruct = vmci_transport_notify_pkt_socket_destruct,
|
||||
.poll_in = vmci_transport_notify_pkt_poll_in,
|
||||
.poll_out = vmci_transport_notify_pkt_poll_out,
|
||||
.handle_notify_pkt = vmci_transport_notify_pkt_handle_pkt,
|
||||
.recv_init = vmci_transport_notify_pkt_recv_init,
|
||||
.recv_pre_block = vmci_transport_notify_pkt_recv_pre_block,
|
||||
.recv_pre_dequeue = vmci_transport_notify_pkt_recv_pre_dequeue,
|
||||
.recv_post_dequeue = vmci_transport_notify_pkt_recv_post_dequeue,
|
||||
.send_init = vmci_transport_notify_pkt_send_init,
|
||||
.send_pre_block = vmci_transport_notify_pkt_send_pre_block,
|
||||
.send_pre_enqueue = vmci_transport_notify_pkt_send_pre_enqueue,
|
||||
.send_post_enqueue = vmci_transport_notify_pkt_send_post_enqueue,
|
||||
.process_request = vmci_transport_notify_pkt_process_request,
|
||||
.process_negotiate = vmci_transport_notify_pkt_process_negotiate,
|
||||
};
|
||||
|
@@ -420,19 +420,19 @@ vmci_transport_notify_pkt_send_pre_enqueue(
|
||||
|
||||
/* Socket always on control packet based operations. */
|
||||
const struct vmci_transport_notify_ops vmci_transport_notify_pkt_q_state_ops = {
|
||||
vmci_transport_notify_pkt_socket_init,
|
||||
vmci_transport_notify_pkt_socket_destruct,
|
||||
vmci_transport_notify_pkt_poll_in,
|
||||
vmci_transport_notify_pkt_poll_out,
|
||||
vmci_transport_notify_pkt_handle_pkt,
|
||||
vmci_transport_notify_pkt_recv_init,
|
||||
vmci_transport_notify_pkt_recv_pre_block,
|
||||
vmci_transport_notify_pkt_recv_pre_dequeue,
|
||||
vmci_transport_notify_pkt_recv_post_dequeue,
|
||||
vmci_transport_notify_pkt_send_init,
|
||||
vmci_transport_notify_pkt_send_pre_block,
|
||||
vmci_transport_notify_pkt_send_pre_enqueue,
|
||||
vmci_transport_notify_pkt_send_post_enqueue,
|
||||
vmci_transport_notify_pkt_process_request,
|
||||
vmci_transport_notify_pkt_process_negotiate,
|
||||
.socket_init = vmci_transport_notify_pkt_socket_init,
|
||||
.socket_destruct = vmci_transport_notify_pkt_socket_destruct,
|
||||
.poll_in = vmci_transport_notify_pkt_poll_in,
|
||||
.poll_out = vmci_transport_notify_pkt_poll_out,
|
||||
.handle_notify_pkt = vmci_transport_notify_pkt_handle_pkt,
|
||||
.recv_init = vmci_transport_notify_pkt_recv_init,
|
||||
.recv_pre_block = vmci_transport_notify_pkt_recv_pre_block,
|
||||
.recv_pre_dequeue = vmci_transport_notify_pkt_recv_pre_dequeue,
|
||||
.recv_post_dequeue = vmci_transport_notify_pkt_recv_post_dequeue,
|
||||
.send_init = vmci_transport_notify_pkt_send_init,
|
||||
.send_pre_block = vmci_transport_notify_pkt_send_pre_block,
|
||||
.send_pre_enqueue = vmci_transport_notify_pkt_send_pre_enqueue,
|
||||
.send_post_enqueue = vmci_transport_notify_pkt_send_post_enqueue,
|
||||
.process_request = vmci_transport_notify_pkt_process_request,
|
||||
.process_negotiate = vmci_transport_notify_pkt_process_negotiate,
|
||||
};
|
||||
|
@@ -70,7 +70,7 @@ static struct ctl_table x25_table[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{ 0, },
|
||||
{ },
|
||||
};
|
||||
|
||||
void __init x25_register_sysctl(void)
|
||||
|
Reference in New Issue
Block a user