X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=include%2Fopenflow%2Fopenflow.h;h=87f9f2cf9e10f371c0bbb6269155c316f06f753a;hb=40a8ca3292a78639919e32ddd1558ce02ad938eb;hp=2847aedd8065f477af00c978fd577f90b4410051;hpb=16f5f39c5db116b8ce90cbb8250cd9716dd04ce7;p=sliver-openvswitch.git diff --git a/include/openflow/openflow.h b/include/openflow/openflow.h index 2847aedd8..87f9f2cf9 100644 --- a/include/openflow/openflow.h +++ b/include/openflow/openflow.h @@ -156,7 +156,9 @@ enum ofp_capabilities { OFPC_STP = 1 << 3, /* 802.1d spanning tree. */ OFPC_MULTI_PHY_TX = 1 << 4, /* Supports transmitting through multiple physical interfaces */ - OFPC_IP_REASM = 1 << 5 /* Can reassemble IP fragments. */ + OFPC_IP_REASM = 1 << 5, /* Can reassemble IP fragments. */ + OFPC_ARP_MATCH_IP = 1 << 7 /* Match IP addresses in ARP + pkts. */ }; /* Flags to indicate behavior of the physical port. These flags are @@ -316,7 +318,7 @@ enum ofp_action_type { OFPAT_SET_DL_DST, /* Ethernet destination address. */ OFPAT_SET_NW_SRC, /* IP source address. */ OFPAT_SET_NW_DST, /* IP destination address. */ - OFPAT_SET_NW_TOS, /* IP ToS/DSCP field (6 bits). */ + OFPAT_SET_NW_TOS, /* IP ToS (DSCP field, 6 bits). */ OFPAT_SET_TP_SRC, /* TCP/UDP source port. */ OFPAT_SET_TP_DST, /* TCP/UDP destination port. */ OFPAT_VENDOR = 0xffff @@ -378,7 +380,7 @@ OFP_ASSERT(sizeof(struct ofp_action_nw_addr) == 8); struct ofp_action_nw_tos { uint16_t type; /* OFPAT_SET_TW_TOS. */ uint16_t len; /* Length is 8. */ - uint8_t nw_tos; /* IP ToS/DSCP (6 bits). */ + uint8_t nw_tos; /* IP TOS (DSCP field, 6 bits). */ uint8_t pad[3]; }; OFP_ASSERT(sizeof(struct ofp_action_nw_tos) == 8); @@ -475,9 +477,10 @@ enum ofp_flow_wildcards { OFPFW_NW_DST_ALL = 32 << OFPFW_NW_DST_SHIFT, OFPFW_DL_VLAN_PCP = 1 << 20, /* VLAN priority. */ + OFPFW_NW_TOS = 1 << 21, /* IP ToS (DSCP field, 6 bits). */ /* Wildcard all fields. */ - OFPFW_ALL = ((1 << 21) - 1) + OFPFW_ALL = ((1 << 22) - 1) }; /* The wildcards for ICMP type and code fields use the transport source @@ -511,8 +514,10 @@ struct ofp_match { uint8_t dl_vlan_pcp; /* Input VLAN priority. */ uint8_t pad1[1]; /* Align to 64-bits. */ uint16_t dl_type; /* Ethernet frame type. */ - uint8_t nw_proto; /* IP protocol. */ - uint8_t pad2[3]; /* Align to 64-bits. */ + uint8_t nw_tos; /* IP ToS (DSCP field, 6 bits). */ + uint8_t nw_proto; /* IP protocol or lower 8 bits of + ARP opcode. */ + uint8_t pad2[2]; /* Align to 64-bits. */ uint32_t nw_src; /* IP source address. */ uint32_t nw_dst; /* IP destination address. */ uint16_t tp_src; /* TCP/UDP source port. */ @@ -580,9 +585,11 @@ struct ofp_flow_removed { uint8_t reason; /* One of OFPRR_*. */ uint8_t pad[1]; /* Align to 32-bits. */ - uint32_t duration; /* Time flow was alive in seconds. */ + uint32_t duration_sec; /* Time flow was alive in seconds. */ + uint32_t duration_nsec; /* Time flow was alive in nanoseconds beyond + duration_sec. */ uint16_t idle_timeout; /* Idle timeout from original flow mod. */ - uint8_t pad2[6]; /* Align to 64-bits. */ + uint8_t pad2[2]; /* Align to 64-bits. */ uint64_t packet_count; uint64_t byte_count; }; @@ -749,18 +756,20 @@ struct ofp_flow_stats { uint8_t table_id; /* ID of table flow came from. */ uint8_t pad; struct ofp_match match; /* Description of fields. */ - uint32_t duration; /* Time flow has been alive in seconds. */ + uint32_t duration_sec; /* Time flow has been alive in seconds. */ + uint32_t duration_nsec; /* Time flow has been alive in nanoseconds + beyond duration_sec. */ uint16_t priority; /* Priority of the entry. Only meaningful when this is not an exact-match entry. */ uint16_t idle_timeout; /* Number of seconds idle before expiration. */ uint16_t hard_timeout; /* Number of seconds before expiration. */ - uint8_t pad2[2]; /* Align to 64 bits. */ + uint8_t pad2[6]; /* Align to 64 bits. */ uint64_t cookie; /* Opaque controller-issued identifier. */ uint64_t packet_count; /* Number of packets in flow. */ uint64_t byte_count; /* Number of bytes in flow. */ struct ofp_action_header actions[0]; /* Actions. */ }; -OFP_ASSERT(sizeof(struct ofp_flow_stats) == 80); +OFP_ASSERT(sizeof(struct ofp_flow_stats) == 88); /* Body for ofp_stats_request of type OFPST_AGGREGATE. */ struct ofp_aggregate_stats_request {