-extern struct notifier_block dp_device_notifier;
-extern int (*dp_ioctl_hook)(struct net_device *dev, struct ifreq *rq, int cmd);
-
-/* Flow table. */
-struct dp_table *dp_table_create(unsigned int n_buckets);
-void dp_table_destroy(struct dp_table *, int free_flows);
-struct sw_flow *dp_table_lookup(struct dp_table *, const struct odp_flow_key *);
-int dp_table_insert(struct dp_table *, struct sw_flow *);
-int dp_table_delete(struct dp_table *, struct sw_flow *);
-int dp_table_expand(struct datapath *);
-int dp_table_flush(struct datapath *);
-int dp_table_foreach(struct dp_table *table,
- int (*callback)(struct sw_flow *flow, void *aux),
- void *aux);
-
-void dp_process_received_packet(struct sk_buff *, struct net_bridge_port *);
-int dp_del_port(struct net_bridge_port *);
-int dp_output_control(struct datapath *, struct sk_buff *, int, u32 arg);
-int dp_min_mtu(const struct datapath *dp);
-void set_dp_devs_mtu(const struct datapath *dp, struct net_device *dev);
-
-struct datapath *get_dp(int dp_idx);
-
-static inline const char *dp_name(const struct datapath *dp)
+/**
+ * struct dp_upcall - metadata to include with a packet to send to userspace
+ * @cmd: One of %OVS_PACKET_CMD_*.
+ * @key: Becomes %OVS_PACKET_ATTR_KEY. Must be nonnull.
+ * @userdata: If nonnull, its u64 value is extracted and passed to userspace as
+ * %OVS_PACKET_ATTR_USERDATA.
+ * @portid: Netlink PID to which packet should be sent. If @portid is 0 then no
+ * packet is sent and the packet is accounted in the datapath's @n_lost
+ * counter.
+ */
+struct dp_upcall_info {
+ u8 cmd;
+ const struct sw_flow_key *key;
+ const struct nlattr *userdata;
+ u32 portid;
+};
+
+/**
+ * struct ovs_net - Per net-namespace data for ovs.
+ * @dps: List of datapaths to enable dumping them all out.
+ * Protected by genl_mutex.
+ * @vport_net: Per network namespace data for vport.
+ */
+struct ovs_net {
+ struct list_head dps;
+ struct vport_net vport_net;
+};
+
+extern int ovs_net_id;
+
+static inline struct net *ovs_dp_get_net(struct datapath *dp)