netlink: Rename pid to portid to avoid confusion
It is a frequent mistake to confuse the netlink port identifier with a process identifier. Try to reduce this confusion by renaming fields that hold port identifiers portid instead of pid. I have carefully avoided changing the structures exported to userspace to avoid changing the userspace API. I have successfully built an allyesconfig kernel with this change. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Acked-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
9f00d9776b
commit
15e473046c
@@ -286,7 +286,7 @@ static int output_userspace(struct datapath *dp, struct sk_buff *skb,
|
||||
upcall.cmd = OVS_PACKET_CMD_ACTION;
|
||||
upcall.key = &OVS_CB(skb)->flow->key;
|
||||
upcall.userdata = NULL;
|
||||
upcall.pid = 0;
|
||||
upcall.portid = 0;
|
||||
|
||||
for (a = nla_data(attr), rem = nla_len(attr); rem > 0;
|
||||
a = nla_next(a, &rem)) {
|
||||
@@ -296,7 +296,7 @@ static int output_userspace(struct datapath *dp, struct sk_buff *skb,
|
||||
break;
|
||||
|
||||
case OVS_USERSPACE_ATTR_PID:
|
||||
upcall.pid = nla_get_u32(a);
|
||||
upcall.portid = nla_get_u32(a);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -225,7 +225,7 @@ void ovs_dp_process_received_packet(struct vport *p, struct sk_buff *skb)
|
||||
upcall.cmd = OVS_PACKET_CMD_MISS;
|
||||
upcall.key = &key;
|
||||
upcall.userdata = NULL;
|
||||
upcall.pid = p->upcall_pid;
|
||||
upcall.portid = p->upcall_portid;
|
||||
ovs_dp_upcall(dp, skb, &upcall);
|
||||
consume_skb(skb);
|
||||
stats_counter = &stats->n_missed;
|
||||
@@ -261,7 +261,7 @@ int ovs_dp_upcall(struct datapath *dp, struct sk_buff *skb,
|
||||
int dp_ifindex;
|
||||
int err;
|
||||
|
||||
if (upcall_info->pid == 0) {
|
||||
if (upcall_info->portid == 0) {
|
||||
err = -ENOTCONN;
|
||||
goto err;
|
||||
}
|
||||
@@ -395,7 +395,7 @@ static int queue_userspace_packet(struct net *net, int dp_ifindex,
|
||||
|
||||
skb_copy_and_csum_dev(skb, nla_data(nla));
|
||||
|
||||
err = genlmsg_unicast(net, user_skb, upcall_info->pid);
|
||||
err = genlmsg_unicast(net, user_skb, upcall_info->portid);
|
||||
|
||||
out:
|
||||
kfree_skb(nskb);
|
||||
@@ -780,7 +780,7 @@ static struct genl_multicast_group ovs_dp_flow_multicast_group = {
|
||||
|
||||
/* Called with genl_lock. */
|
||||
static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp,
|
||||
struct sk_buff *skb, u32 pid,
|
||||
struct sk_buff *skb, u32 portid,
|
||||
u32 seq, u32 flags, u8 cmd)
|
||||
{
|
||||
const int skb_orig_len = skb->len;
|
||||
@@ -795,7 +795,7 @@ static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp,
|
||||
sf_acts = rcu_dereference_protected(flow->sf_acts,
|
||||
lockdep_genl_is_held());
|
||||
|
||||
ovs_header = genlmsg_put(skb, pid, seq, &dp_flow_genl_family, flags, cmd);
|
||||
ovs_header = genlmsg_put(skb, portid, seq, &dp_flow_genl_family, flags, cmd);
|
||||
if (!ovs_header)
|
||||
return -EMSGSIZE;
|
||||
|
||||
@@ -879,7 +879,7 @@ static struct sk_buff *ovs_flow_cmd_alloc_info(struct sw_flow *flow)
|
||||
|
||||
static struct sk_buff *ovs_flow_cmd_build_info(struct sw_flow *flow,
|
||||
struct datapath *dp,
|
||||
u32 pid, u32 seq, u8 cmd)
|
||||
u32 portid, u32 seq, u8 cmd)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
int retval;
|
||||
@@ -888,7 +888,7 @@ static struct sk_buff *ovs_flow_cmd_build_info(struct sw_flow *flow,
|
||||
if (!skb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
retval = ovs_flow_cmd_fill_info(flow, dp, skb, pid, seq, 0, cmd);
|
||||
retval = ovs_flow_cmd_fill_info(flow, dp, skb, portid, seq, 0, cmd);
|
||||
BUG_ON(retval < 0);
|
||||
return skb;
|
||||
}
|
||||
@@ -970,7 +970,7 @@ static int ovs_flow_cmd_new_or_set(struct sk_buff *skb, struct genl_info *info)
|
||||
flow->hash = ovs_flow_hash(&key, key_len);
|
||||
ovs_flow_tbl_insert(table, flow);
|
||||
|
||||
reply = ovs_flow_cmd_build_info(flow, dp, info->snd_pid,
|
||||
reply = ovs_flow_cmd_build_info(flow, dp, info->snd_portid,
|
||||
info->snd_seq,
|
||||
OVS_FLOW_CMD_NEW);
|
||||
} else {
|
||||
@@ -1008,7 +1008,7 @@ static int ovs_flow_cmd_new_or_set(struct sk_buff *skb, struct genl_info *info)
|
||||
ovs_flow_deferred_free_acts(old_acts);
|
||||
}
|
||||
|
||||
reply = ovs_flow_cmd_build_info(flow, dp, info->snd_pid,
|
||||
reply = ovs_flow_cmd_build_info(flow, dp, info->snd_portid,
|
||||
info->snd_seq, OVS_FLOW_CMD_NEW);
|
||||
|
||||
/* Clear stats. */
|
||||
@@ -1020,7 +1020,7 @@ static int ovs_flow_cmd_new_or_set(struct sk_buff *skb, struct genl_info *info)
|
||||
}
|
||||
|
||||
if (!IS_ERR(reply))
|
||||
genl_notify(reply, genl_info_net(info), info->snd_pid,
|
||||
genl_notify(reply, genl_info_net(info), info->snd_portid,
|
||||
ovs_dp_flow_multicast_group.id, info->nlhdr,
|
||||
GFP_KERNEL);
|
||||
else
|
||||
@@ -1061,7 +1061,7 @@ static int ovs_flow_cmd_get(struct sk_buff *skb, struct genl_info *info)
|
||||
if (!flow)
|
||||
return -ENOENT;
|
||||
|
||||
reply = ovs_flow_cmd_build_info(flow, dp, info->snd_pid,
|
||||
reply = ovs_flow_cmd_build_info(flow, dp, info->snd_portid,
|
||||
info->snd_seq, OVS_FLOW_CMD_NEW);
|
||||
if (IS_ERR(reply))
|
||||
return PTR_ERR(reply);
|
||||
@@ -1103,13 +1103,13 @@ static int ovs_flow_cmd_del(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
ovs_flow_tbl_remove(table, flow);
|
||||
|
||||
err = ovs_flow_cmd_fill_info(flow, dp, reply, info->snd_pid,
|
||||
err = ovs_flow_cmd_fill_info(flow, dp, reply, info->snd_portid,
|
||||
info->snd_seq, 0, OVS_FLOW_CMD_DEL);
|
||||
BUG_ON(err < 0);
|
||||
|
||||
ovs_flow_deferred_free(flow);
|
||||
|
||||
genl_notify(reply, genl_info_net(info), info->snd_pid,
|
||||
genl_notify(reply, genl_info_net(info), info->snd_portid,
|
||||
ovs_dp_flow_multicast_group.id, info->nlhdr, GFP_KERNEL);
|
||||
return 0;
|
||||
}
|
||||
@@ -1137,7 +1137,7 @@ static int ovs_flow_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
break;
|
||||
|
||||
if (ovs_flow_cmd_fill_info(flow, dp, skb,
|
||||
NETLINK_CB(cb->skb).pid,
|
||||
NETLINK_CB(cb->skb).portid,
|
||||
cb->nlh->nlmsg_seq, NLM_F_MULTI,
|
||||
OVS_FLOW_CMD_NEW) < 0)
|
||||
break;
|
||||
@@ -1191,13 +1191,13 @@ static struct genl_multicast_group ovs_dp_datapath_multicast_group = {
|
||||
};
|
||||
|
||||
static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb,
|
||||
u32 pid, u32 seq, u32 flags, u8 cmd)
|
||||
u32 portid, u32 seq, u32 flags, u8 cmd)
|
||||
{
|
||||
struct ovs_header *ovs_header;
|
||||
struct ovs_dp_stats dp_stats;
|
||||
int err;
|
||||
|
||||
ovs_header = genlmsg_put(skb, pid, seq, &dp_datapath_genl_family,
|
||||
ovs_header = genlmsg_put(skb, portid, seq, &dp_datapath_genl_family,
|
||||
flags, cmd);
|
||||
if (!ovs_header)
|
||||
goto error;
|
||||
@@ -1222,7 +1222,7 @@ error:
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
|
||||
static struct sk_buff *ovs_dp_cmd_build_info(struct datapath *dp, u32 pid,
|
||||
static struct sk_buff *ovs_dp_cmd_build_info(struct datapath *dp, u32 portid,
|
||||
u32 seq, u8 cmd)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
@@ -1232,7 +1232,7 @@ static struct sk_buff *ovs_dp_cmd_build_info(struct datapath *dp, u32 pid,
|
||||
if (!skb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
retval = ovs_dp_cmd_fill_info(dp, skb, pid, seq, 0, cmd);
|
||||
retval = ovs_dp_cmd_fill_info(dp, skb, portid, seq, 0, cmd);
|
||||
if (retval < 0) {
|
||||
kfree_skb(skb);
|
||||
return ERR_PTR(retval);
|
||||
@@ -1311,7 +1311,7 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct genl_info *info)
|
||||
parms.options = NULL;
|
||||
parms.dp = dp;
|
||||
parms.port_no = OVSP_LOCAL;
|
||||
parms.upcall_pid = nla_get_u32(a[OVS_DP_ATTR_UPCALL_PID]);
|
||||
parms.upcall_portid = nla_get_u32(a[OVS_DP_ATTR_UPCALL_PID]);
|
||||
|
||||
vport = new_vport(&parms);
|
||||
if (IS_ERR(vport)) {
|
||||
@@ -1322,7 +1322,7 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct genl_info *info)
|
||||
goto err_destroy_ports_array;
|
||||
}
|
||||
|
||||
reply = ovs_dp_cmd_build_info(dp, info->snd_pid,
|
||||
reply = ovs_dp_cmd_build_info(dp, info->snd_portid,
|
||||
info->snd_seq, OVS_DP_CMD_NEW);
|
||||
err = PTR_ERR(reply);
|
||||
if (IS_ERR(reply))
|
||||
@@ -1332,7 +1332,7 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct genl_info *info)
|
||||
list_add_tail(&dp->list_node, &ovs_net->dps);
|
||||
rtnl_unlock();
|
||||
|
||||
genl_notify(reply, genl_info_net(info), info->snd_pid,
|
||||
genl_notify(reply, genl_info_net(info), info->snd_portid,
|
||||
ovs_dp_datapath_multicast_group.id, info->nlhdr,
|
||||
GFP_KERNEL);
|
||||
return 0;
|
||||
@@ -1394,7 +1394,7 @@ static int ovs_dp_cmd_del(struct sk_buff *skb, struct genl_info *info)
|
||||
if (IS_ERR(dp))
|
||||
return err;
|
||||
|
||||
reply = ovs_dp_cmd_build_info(dp, info->snd_pid,
|
||||
reply = ovs_dp_cmd_build_info(dp, info->snd_portid,
|
||||
info->snd_seq, OVS_DP_CMD_DEL);
|
||||
err = PTR_ERR(reply);
|
||||
if (IS_ERR(reply))
|
||||
@@ -1402,7 +1402,7 @@ static int ovs_dp_cmd_del(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
__dp_destroy(dp);
|
||||
|
||||
genl_notify(reply, genl_info_net(info), info->snd_pid,
|
||||
genl_notify(reply, genl_info_net(info), info->snd_portid,
|
||||
ovs_dp_datapath_multicast_group.id, info->nlhdr,
|
||||
GFP_KERNEL);
|
||||
|
||||
@@ -1419,7 +1419,7 @@ static int ovs_dp_cmd_set(struct sk_buff *skb, struct genl_info *info)
|
||||
if (IS_ERR(dp))
|
||||
return PTR_ERR(dp);
|
||||
|
||||
reply = ovs_dp_cmd_build_info(dp, info->snd_pid,
|
||||
reply = ovs_dp_cmd_build_info(dp, info->snd_portid,
|
||||
info->snd_seq, OVS_DP_CMD_NEW);
|
||||
if (IS_ERR(reply)) {
|
||||
err = PTR_ERR(reply);
|
||||
@@ -1428,7 +1428,7 @@ static int ovs_dp_cmd_set(struct sk_buff *skb, struct genl_info *info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
genl_notify(reply, genl_info_net(info), info->snd_pid,
|
||||
genl_notify(reply, genl_info_net(info), info->snd_portid,
|
||||
ovs_dp_datapath_multicast_group.id, info->nlhdr,
|
||||
GFP_KERNEL);
|
||||
|
||||
@@ -1444,7 +1444,7 @@ static int ovs_dp_cmd_get(struct sk_buff *skb, struct genl_info *info)
|
||||
if (IS_ERR(dp))
|
||||
return PTR_ERR(dp);
|
||||
|
||||
reply = ovs_dp_cmd_build_info(dp, info->snd_pid,
|
||||
reply = ovs_dp_cmd_build_info(dp, info->snd_portid,
|
||||
info->snd_seq, OVS_DP_CMD_NEW);
|
||||
if (IS_ERR(reply))
|
||||
return PTR_ERR(reply);
|
||||
@@ -1461,7 +1461,7 @@ static int ovs_dp_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
|
||||
list_for_each_entry(dp, &ovs_net->dps, list_node) {
|
||||
if (i >= skip &&
|
||||
ovs_dp_cmd_fill_info(dp, skb, NETLINK_CB(cb->skb).pid,
|
||||
ovs_dp_cmd_fill_info(dp, skb, NETLINK_CB(cb->skb).portid,
|
||||
cb->nlh->nlmsg_seq, NLM_F_MULTI,
|
||||
OVS_DP_CMD_NEW) < 0)
|
||||
break;
|
||||
@@ -1521,13 +1521,13 @@ struct genl_multicast_group ovs_dp_vport_multicast_group = {
|
||||
|
||||
/* Called with RTNL lock or RCU read lock. */
|
||||
static int ovs_vport_cmd_fill_info(struct vport *vport, struct sk_buff *skb,
|
||||
u32 pid, u32 seq, u32 flags, u8 cmd)
|
||||
u32 portid, u32 seq, u32 flags, u8 cmd)
|
||||
{
|
||||
struct ovs_header *ovs_header;
|
||||
struct ovs_vport_stats vport_stats;
|
||||
int err;
|
||||
|
||||
ovs_header = genlmsg_put(skb, pid, seq, &dp_vport_genl_family,
|
||||
ovs_header = genlmsg_put(skb, portid, seq, &dp_vport_genl_family,
|
||||
flags, cmd);
|
||||
if (!ovs_header)
|
||||
return -EMSGSIZE;
|
||||
@@ -1537,7 +1537,7 @@ static int ovs_vport_cmd_fill_info(struct vport *vport, struct sk_buff *skb,
|
||||
if (nla_put_u32(skb, OVS_VPORT_ATTR_PORT_NO, vport->port_no) ||
|
||||
nla_put_u32(skb, OVS_VPORT_ATTR_TYPE, vport->ops->type) ||
|
||||
nla_put_string(skb, OVS_VPORT_ATTR_NAME, vport->ops->get_name(vport)) ||
|
||||
nla_put_u32(skb, OVS_VPORT_ATTR_UPCALL_PID, vport->upcall_pid))
|
||||
nla_put_u32(skb, OVS_VPORT_ATTR_UPCALL_PID, vport->upcall_portid))
|
||||
goto nla_put_failure;
|
||||
|
||||
ovs_vport_get_stats(vport, &vport_stats);
|
||||
@@ -1559,7 +1559,7 @@ error:
|
||||
}
|
||||
|
||||
/* Called with RTNL lock or RCU read lock. */
|
||||
struct sk_buff *ovs_vport_cmd_build_info(struct vport *vport, u32 pid,
|
||||
struct sk_buff *ovs_vport_cmd_build_info(struct vport *vport, u32 portid,
|
||||
u32 seq, u8 cmd)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
@@ -1569,7 +1569,7 @@ struct sk_buff *ovs_vport_cmd_build_info(struct vport *vport, u32 pid,
|
||||
if (!skb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
retval = ovs_vport_cmd_fill_info(vport, skb, pid, seq, 0, cmd);
|
||||
retval = ovs_vport_cmd_fill_info(vport, skb, portid, seq, 0, cmd);
|
||||
if (retval < 0) {
|
||||
kfree_skb(skb);
|
||||
return ERR_PTR(retval);
|
||||
@@ -1661,21 +1661,21 @@ static int ovs_vport_cmd_new(struct sk_buff *skb, struct genl_info *info)
|
||||
parms.options = a[OVS_VPORT_ATTR_OPTIONS];
|
||||
parms.dp = dp;
|
||||
parms.port_no = port_no;
|
||||
parms.upcall_pid = nla_get_u32(a[OVS_VPORT_ATTR_UPCALL_PID]);
|
||||
parms.upcall_portid = nla_get_u32(a[OVS_VPORT_ATTR_UPCALL_PID]);
|
||||
|
||||
vport = new_vport(&parms);
|
||||
err = PTR_ERR(vport);
|
||||
if (IS_ERR(vport))
|
||||
goto exit_unlock;
|
||||
|
||||
reply = ovs_vport_cmd_build_info(vport, info->snd_pid, info->snd_seq,
|
||||
reply = ovs_vport_cmd_build_info(vport, info->snd_portid, info->snd_seq,
|
||||
OVS_VPORT_CMD_NEW);
|
||||
if (IS_ERR(reply)) {
|
||||
err = PTR_ERR(reply);
|
||||
ovs_dp_detach_port(vport);
|
||||
goto exit_unlock;
|
||||
}
|
||||
genl_notify(reply, genl_info_net(info), info->snd_pid,
|
||||
genl_notify(reply, genl_info_net(info), info->snd_portid,
|
||||
ovs_dp_vport_multicast_group.id, info->nlhdr, GFP_KERNEL);
|
||||
|
||||
exit_unlock:
|
||||
@@ -1707,9 +1707,9 @@ static int ovs_vport_cmd_set(struct sk_buff *skb, struct genl_info *info)
|
||||
if (err)
|
||||
goto exit_unlock;
|
||||
if (a[OVS_VPORT_ATTR_UPCALL_PID])
|
||||
vport->upcall_pid = nla_get_u32(a[OVS_VPORT_ATTR_UPCALL_PID]);
|
||||
vport->upcall_portid = nla_get_u32(a[OVS_VPORT_ATTR_UPCALL_PID]);
|
||||
|
||||
reply = ovs_vport_cmd_build_info(vport, info->snd_pid, info->snd_seq,
|
||||
reply = ovs_vport_cmd_build_info(vport, info->snd_portid, info->snd_seq,
|
||||
OVS_VPORT_CMD_NEW);
|
||||
if (IS_ERR(reply)) {
|
||||
netlink_set_err(sock_net(skb->sk)->genl_sock, 0,
|
||||
@@ -1717,7 +1717,7 @@ static int ovs_vport_cmd_set(struct sk_buff *skb, struct genl_info *info)
|
||||
goto exit_unlock;
|
||||
}
|
||||
|
||||
genl_notify(reply, genl_info_net(info), info->snd_pid,
|
||||
genl_notify(reply, genl_info_net(info), info->snd_portid,
|
||||
ovs_dp_vport_multicast_group.id, info->nlhdr, GFP_KERNEL);
|
||||
|
||||
exit_unlock:
|
||||
@@ -1743,7 +1743,7 @@ static int ovs_vport_cmd_del(struct sk_buff *skb, struct genl_info *info)
|
||||
goto exit_unlock;
|
||||
}
|
||||
|
||||
reply = ovs_vport_cmd_build_info(vport, info->snd_pid, info->snd_seq,
|
||||
reply = ovs_vport_cmd_build_info(vport, info->snd_portid, info->snd_seq,
|
||||
OVS_VPORT_CMD_DEL);
|
||||
err = PTR_ERR(reply);
|
||||
if (IS_ERR(reply))
|
||||
@@ -1751,7 +1751,7 @@ static int ovs_vport_cmd_del(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
ovs_dp_detach_port(vport);
|
||||
|
||||
genl_notify(reply, genl_info_net(info), info->snd_pid,
|
||||
genl_notify(reply, genl_info_net(info), info->snd_portid,
|
||||
ovs_dp_vport_multicast_group.id, info->nlhdr, GFP_KERNEL);
|
||||
|
||||
exit_unlock:
|
||||
@@ -1773,7 +1773,7 @@ static int ovs_vport_cmd_get(struct sk_buff *skb, struct genl_info *info)
|
||||
if (IS_ERR(vport))
|
||||
goto exit_unlock;
|
||||
|
||||
reply = ovs_vport_cmd_build_info(vport, info->snd_pid, info->snd_seq,
|
||||
reply = ovs_vport_cmd_build_info(vport, info->snd_portid, info->snd_seq,
|
||||
OVS_VPORT_CMD_NEW);
|
||||
err = PTR_ERR(reply);
|
||||
if (IS_ERR(reply))
|
||||
@@ -1808,7 +1808,7 @@ static int ovs_vport_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
hlist_for_each_entry_rcu(vport, n, &dp->ports[i], dp_hash_node) {
|
||||
if (j >= skip &&
|
||||
ovs_vport_cmd_fill_info(vport, skb,
|
||||
NETLINK_CB(cb->skb).pid,
|
||||
NETLINK_CB(cb->skb).portid,
|
||||
cb->nlh->nlmsg_seq,
|
||||
NLM_F_MULTI,
|
||||
OVS_VPORT_CMD_NEW) < 0)
|
||||
|
@@ -129,7 +129,7 @@ struct dp_upcall_info {
|
||||
u8 cmd;
|
||||
const struct sw_flow_key *key;
|
||||
const struct nlattr *userdata;
|
||||
u32 pid;
|
||||
u32 portid;
|
||||
};
|
||||
|
||||
static inline struct net *ovs_dp_get_net(struct datapath *dp)
|
||||
|
@@ -125,7 +125,7 @@ struct vport *ovs_vport_alloc(int priv_size, const struct vport_ops *ops,
|
||||
|
||||
vport->dp = parms->dp;
|
||||
vport->port_no = parms->port_no;
|
||||
vport->upcall_pid = parms->upcall_pid;
|
||||
vport->upcall_portid = parms->upcall_portid;
|
||||
vport->ops = ops;
|
||||
INIT_HLIST_NODE(&vport->dp_hash_node);
|
||||
|
||||
|
@@ -70,7 +70,7 @@ struct vport_err_stats {
|
||||
* @rcu: RCU callback head for deferred destruction.
|
||||
* @port_no: Index into @dp's @ports array.
|
||||
* @dp: Datapath to which this port belongs.
|
||||
* @upcall_pid: The Netlink port to use for packets received on this port that
|
||||
* @upcall_portid: The Netlink port to use for packets received on this port that
|
||||
* miss the flow table.
|
||||
* @hash_node: Element in @dev_table hash table in vport.c.
|
||||
* @dp_hash_node: Element in @datapath->ports hash table in datapath.c.
|
||||
@@ -83,7 +83,7 @@ struct vport {
|
||||
struct rcu_head rcu;
|
||||
u16 port_no;
|
||||
struct datapath *dp;
|
||||
u32 upcall_pid;
|
||||
u32 upcall_portid;
|
||||
|
||||
struct hlist_node hash_node;
|
||||
struct hlist_node dp_hash_node;
|
||||
@@ -113,7 +113,7 @@ struct vport_parms {
|
||||
/* For ovs_vport_alloc(). */
|
||||
struct datapath *dp;
|
||||
u16 port_no;
|
||||
u32 upcall_pid;
|
||||
u32 upcall_portid;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user