Modify VLAN actions to support setting both VID and priority.
[sliver-openvswitch.git] / datapath / datapath.h
index 44a3b69..f5225e1 100644 (file)
@@ -6,6 +6,7 @@
 #include <linux/mutex.h>
 #include <linux/netlink.h>
 #include <linux/netdevice.h>
+#include <linux/workqueue.h>
 #include <linux/skbuff.h>
 #include "openflow.h"
 #include "flow.h"
@@ -27,7 +28,9 @@
 
 /* Actions supported by this implementation. */
 #define OFP_SUPPORTED_ACTIONS ( (1 << OFPAT_OUTPUT) \
-               | (1 << OFPAT_SET_DL_VLAN) \
+               | (1 << OFPAT_SET_VLAN_VID) \
+               | (1 << OFPAT_SET_VLAN_PCP) \
+               | (1 << OFPAT_STRIP_VLAN) \
                | (1 << OFPAT_SET_DL_SRC) \
                | (1 << OFPAT_SET_DL_DST) \
                | (1 << OFPAT_SET_NW_SRC) \
@@ -68,21 +71,38 @@ struct sender {
        uint32_t seq;           /* Netlink sequence ID of request. */
 };
 
+struct net_bridge_port {
+       u16     port_no;
+       u32 config;             /* Some subset of OFPPC_* flags. */
+       u32 state;              /* Some subset of OFPPS_* flags. */
+       spinlock_t lock;
+       struct work_struct port_task;
+       struct datapath *dp;
+       struct net_device *dev;
+       struct list_head node; /* Element in datapath.ports. */
+};
+
 extern struct mutex dp_mutex;
+extern struct notifier_block dp_device_notifier;
 
-int dp_output_port(struct datapath *, struct sk_buff *, int out_port);
+int dp_del_switch_port(struct net_bridge_port *);
+int dp_output_port(struct datapath *, struct sk_buff *, int out_port,
+                  int ignore_no_fwd);
 int dp_output_control(struct datapath *, struct sk_buff *, uint32_t, 
                        size_t, int);
 int dp_set_origin(struct datapath *, uint16_t, struct sk_buff *);
 int dp_send_features_reply(struct datapath *, const struct sender *);
 int dp_send_config_reply(struct datapath *, const struct sender *);
+int dp_send_port_status(struct net_bridge_port *p, uint8_t status);
 int dp_send_flow_expired(struct datapath *, struct sw_flow *,
                         enum ofp_flow_expired_reason);
 int dp_send_error_msg(struct datapath *, const struct sender *, 
-                       uint16_t, uint16_t, const uint8_t *, size_t);
+                       uint16_t, uint16_t, const void *, size_t);
 int dp_update_port_flags(struct datapath *dp, const struct ofp_port_mod *opm);
 int dp_send_echo_reply(struct datapath *, const struct sender *,
                       const struct ofp_header *);
+int dp_send_hello(struct datapath *, const struct sender *,
+                 const struct ofp_header *);
 
 /* Should hold at least RCU read lock when calling */
 struct datapath *dp_get(int dp_idx);