ovs_net
struct ovs_net *ovs_net = net_generic(net, ovs_net_id);
return ovs_net->xt_label;
static int ovs_ct_limit_init(struct net *net, struct ovs_net *ovs_net)
ovs_net->ct_limit_info = kmalloc_obj(*ovs_net->ct_limit_info);
if (!ovs_net->ct_limit_info)
ovs_net->ct_limit_info->default_limit = OVS_CT_LIMIT_DEFAULT;
ovs_net->ct_limit_info->limits =
if (!ovs_net->ct_limit_info->limits) {
kfree(ovs_net->ct_limit_info);
INIT_HLIST_HEAD(&ovs_net->ct_limit_info->limits[i]);
ovs_net->ct_limit_info->data = nf_conncount_init(net, sizeof(u32));
if (IS_ERR(ovs_net->ct_limit_info->data)) {
err = PTR_ERR(ovs_net->ct_limit_info->data);
kfree(ovs_net->ct_limit_info->limits);
kfree(ovs_net->ct_limit_info);
static void ovs_ct_limit_exit(struct net *net, struct ovs_net *ovs_net)
const struct ovs_ct_limit_info *info = ovs_net->ct_limit_info;
struct ovs_net *ovs_net = net_generic(sock_net(skb->sk), ovs_net_id);
struct ovs_ct_limit_info *ct_limit_info = ovs_net->ct_limit_info;
struct ovs_net *ovs_net = net_generic(sock_net(skb->sk), ovs_net_id);
struct ovs_ct_limit_info *ct_limit_info = ovs_net->ct_limit_info;
struct ovs_net *ovs_net = net_generic(net, ovs_net_id);
struct ovs_ct_limit_info *ct_limit_info = ovs_net->ct_limit_info;
struct ovs_net *ovs_net = net_generic(net, ovs_net_id);
ovs_net->xt_label = false;
ovs_net->xt_label = true;
return ovs_ct_limit_init(net, ovs_net);
struct ovs_net *ovs_net = net_generic(net, ovs_net_id);
ovs_ct_limit_exit(net, ovs_net);
if (ovs_net->xt_label)
struct ovs_net *ovs_net = net_generic(net, ovs_net_id);
const struct ovs_ct_limit_info *ct_limit_info = ovs_net->ct_limit_info;
struct ovs_net *ovs_net;
ovs_net = net_generic(ovs_dp_get_net(dp), ovs_net_id);
list_add_tail_rcu(&dp->list_node, &ovs_net->dps);
struct ovs_net *ovs_net = net_generic(sock_net(skb->sk), ovs_net_id);
list_for_each_entry(dp, &ovs_net->dps, list_node) {
struct ovs_net *ovs_net = container_of(work, struct ovs_net,
list_for_each_entry(dp, &ovs_net->dps, list_node)
schedule_delayed_work(&ovs_net->masks_rebalance,
struct ovs_net *ovs_net = net_generic(net, ovs_net_id);
INIT_LIST_HEAD(&ovs_net->dps);
INIT_WORK(&ovs_net->dp_notify_work, ovs_dp_notify_wq);
INIT_DELAYED_WORK(&ovs_net->masks_rebalance, ovs_dp_masks_rebalance);
schedule_delayed_work(&ovs_net->masks_rebalance,
struct ovs_net *ovs_net = net_generic(net, ovs_net_id);
list_for_each_entry(dp, &ovs_net->dps, list_node) {
struct ovs_net *ovs_net = net_generic(dnet, ovs_net_id);
list_for_each_entry_safe(dp, dp_next, &ovs_net->dps, list_node)
cancel_delayed_work_sync(&ovs_net->masks_rebalance);
cancel_work_sync(&ovs_net->dp_notify_work);
.size = sizeof(struct ovs_net),
struct ovs_net *ovs_net = container_of(work, struct ovs_net, dp_notify_work);
list_for_each_entry(dp, &ovs_net->dps, list_node) {
struct ovs_net *ovs_net;
ovs_net = net_generic(dev_net(dev), ovs_net_id);
queue_work(system_percpu_wq, &ovs_net->dp_notify_work);