X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fopenvswitch%2Fdatapath-protocol.h;h=b0e9dfbb3cf44988291f96435a2251c6918f1714;hb=700712e226b325f02421189f6fb52bff167876ce;hp=13aa92251d07e8fccbc6a884060e7d24d9882076;hpb=c1c9c9c4b636ab2acf2f75024c282a9a497ca9a9;p=openvswitch diff --git a/include/openvswitch/datapath-protocol.h b/include/openvswitch/datapath-protocol.h index 13aa9225..b0e9dfbb 100644 --- a/include/openvswitch/datapath-protocol.h +++ b/include/openvswitch/datapath-protocol.h @@ -79,9 +79,6 @@ #define ODP_PORT_QUERY _IOWR('O', 9, struct odp_port) #define ODP_PORT_LIST _IOWR('O', 10, struct odp_portvec) -#define ODP_PORT_GROUP_SET _IOR('O', 11, struct odp_port_group) -#define ODP_PORT_GROUP_GET _IOWR('O', 12, struct odp_port_group) - #define ODP_FLOW_GET _IOWR('O', 13, struct odp_flow) #define ODP_FLOW_PUT _IOWR('O', 14, struct odp_flow) #define ODP_FLOW_LIST _IOWR('O', 15, struct odp_flowvec) @@ -112,8 +109,6 @@ struct odp_stats { /* Ports. */ uint32_t n_ports; /* Current number of ports. */ uint32_t max_ports; /* Maximum supported number of ports. */ - uint16_t max_groups; /* Maximum number of port groups. */ - uint16_t reserved; /* Lookups. */ uint64_t n_frags; /* Number of dropped IP fragments. */ @@ -198,38 +193,39 @@ struct odp_portvec { uint32_t n_ports; }; -struct odp_port_group { - uint16_t *ports; - uint16_t n_ports; /* Number of ports. */ - uint16_t group; /* Group number. */ -}; - struct odp_flow_stats { uint64_t n_packets; /* Number of matched packets. */ uint64_t n_bytes; /* Number of matched bytes. */ uint64_t used_sec; /* Time last used, in system monotonic time. */ uint32_t used_nsec; uint8_t tcp_flags; - uint8_t ip_tos; + uint8_t reserved; uint16_t error; /* Used by ODP_FLOW_GET. */ }; +/* + * The datapath protocol adopts the Linux convention for TCI fields: if an + * 802.1Q header is present then its TCI value is used verbatim except that the + * CFI bit (0x1000) is always set to 1, and all-bits-zero indicates no 802.1Q + * header. + */ +#define ODP_TCI_PRESENT 0x1000 /* CFI bit */ + struct odp_flow_key { ovs_be32 tun_id; /* Encapsulating tunnel ID. */ ovs_be32 nw_src; /* IP source address. */ ovs_be32 nw_dst; /* IP destination address. */ uint16_t in_port; /* Input switch port. */ - ovs_be16 dl_vlan; /* Input VLAN. */ + ovs_be16 dl_tci; /* All zeros if 802.1Q header absent, + * ODP_TCI_PRESENT set if present. */ ovs_be16 dl_type; /* Ethernet frame type. */ ovs_be16 tp_src; /* TCP/UDP source port. */ ovs_be16 tp_dst; /* TCP/UDP destination port. */ uint8_t dl_src[6]; /* Ethernet source address. */ uint8_t dl_dst[6]; /* Ethernet destination address. */ uint8_t nw_proto; /* IP protocol or lower 8 bits of - ARP opcode. */ - uint8_t dl_vlan_pcp; /* Input VLAN priority. */ + ARP opcode. */ uint8_t nw_tos; /* IP ToS (DSCP field, 6 bits). */ - uint8_t reserved[3]; /* Align to 32-bits...must be zeroed. */ }; /* Flags for ODP_FLOW. */ @@ -259,17 +255,10 @@ struct odp_flowvec { uint32_t n_flows; }; -/* The VLAN id is 12 bits, so we can use the entire 16 bits to indicate - * special conditions. All ones is used to match that no VLAN id was - * set. */ -#define ODP_VLAN_NONE 0xffff - /* Action types. */ #define ODPAT_OUTPUT 0 /* Output to switch port. */ -#define ODPAT_OUTPUT_GROUP 1 /* Output to all ports in group. */ #define ODPAT_CONTROLLER 2 /* Send copy to controller. */ -#define ODPAT_SET_VLAN_VID 3 /* Set the 802.1q VLAN id. */ -#define ODPAT_SET_VLAN_PCP 4 /* Set the 802.1q priority. */ +#define ODPAT_SET_DL_TCI 3 /* Set the 802.1q TCI value. */ #define ODPAT_STRIP_VLAN 5 /* Strip the 802.1q header. */ #define ODPAT_SET_DL_SRC 6 /* Ethernet source address. */ #define ODPAT_SET_DL_DST 7 /* Ethernet destination address. */ @@ -281,7 +270,8 @@ struct odp_flowvec { #define ODPAT_SET_TUNNEL 13 /* Set the encapsulating tunnel ID. */ #define ODPAT_SET_PRIORITY 14 /* Set skb->priority. */ #define ODPAT_POP_PRIORITY 15 /* Restore original skb->priority. */ -#define ODPAT_N_ACTIONS 16 +#define ODPAT_DROP_SPOOFED_ARP 16 /* Drop ARPs with spoofed source MAC. */ +#define ODPAT_N_ACTIONS 17 struct odp_action_output { uint16_t type; /* ODPAT_OUTPUT. */ @@ -290,13 +280,6 @@ struct odp_action_output { uint16_t reserved2; }; -struct odp_action_output_group { - uint16_t type; /* ODPAT_OUTPUT_GROUP. */ - uint16_t group; /* Group number. */ - uint16_t reserved1; - uint16_t reserved2; -}; - struct odp_action_controller { uint16_t type; /* ODPAT_OUTPUT_CONTROLLER. */ uint16_t reserved; @@ -309,21 +292,11 @@ struct odp_action_tunnel { ovs_be32 tun_id; /* Tunnel ID. */ }; -/* Action structure for ODPAT_SET_VLAN_VID. */ -struct odp_action_vlan_vid { - uint16_t type; /* ODPAT_SET_VLAN_VID. */ - ovs_be16 vlan_vid; /* VLAN id. */ - uint16_t reserved1; - uint16_t reserved2; -}; - -/* Action structure for ODPAT_SET_VLAN_PCP. */ -struct odp_action_vlan_pcp { - uint16_t type; /* ODPAT_SET_VLAN_PCP. */ - uint8_t vlan_pcp; /* VLAN priority. */ - uint8_t reserved1; - uint16_t reserved2; - uint16_t reserved3; +/* Action structure for ODPAT_SET_DL_TCI. */ +struct odp_action_dl_tci { + uint16_t type; /* ODPAT_SET_DL_TCI. */ + ovs_be16 tci; /* New TCI. CFI bit must be zero. */ + uint32_t reserved; }; /* Action structure for ODPAT_SET_DL_SRC/DST. */ @@ -365,11 +338,9 @@ struct odp_action_priority { union odp_action { uint16_t type; struct odp_action_output output; - struct odp_action_output_group output_group; struct odp_action_controller controller; struct odp_action_tunnel tunnel; - struct odp_action_vlan_vid vlan_vid; - struct odp_action_vlan_pcp vlan_pcp; + struct odp_action_dl_tci dl_tci; struct odp_action_dl_addr dl_addr; struct odp_action_nw_addr nw_addr; struct odp_action_nw_tos nw_tos; @@ -378,10 +349,6 @@ union odp_action { }; struct odp_execute { - uint16_t in_port; - uint16_t reserved1; - uint32_t reserved2; - union odp_action *actions; uint32_t n_actions; @@ -442,9 +409,4 @@ struct odp_vport_mtu { */ #define ODP_DL_TYPE_NOT_ETH_TYPE 0x05ff -/* The VLAN id is 12-bits, so we can use the entire 16 bits to indicate - * special conditions. All ones indicates that no VLAN id was set. - */ -#define ODP_VLAN_NONE 0xffff - #endif /* openvswitch/datapath-protocol.h */