Signed-off-by: Ethan Jackson <ethan@nicira.com>
ovs_be16 flow_vlan_tci;
uint32_t flow_skb_mark;
uint8_t flow_nw_tos;
ovs_be16 flow_vlan_tci;
uint32_t flow_skb_mark;
uint8_t flow_nw_tos;
- struct priority_to_dscp *pdscp;
uint32_t out_port, odp_port;
uint32_t out_port, odp_port;
/* If 'struct flow' gets additional metadata, we'll need to zero it out
* before traversing a patch port. */
/* If 'struct flow' gets additional metadata, we'll need to zero it out
* before traversing a patch port. */
flow_skb_mark = flow->skb_mark;
flow_nw_tos = flow->nw_tos;
flow_skb_mark = flow->skb_mark;
flow_nw_tos = flow->nw_tos;
- pdscp = get_priority(ofport, flow->skb_priority);
- if (pdscp) {
+ if (ofproto_dpif_dscp_from_priority(ofport, flow->skb_priority, &dscp)) {
flow->nw_tos &= ~IP_DSCP_MASK;
flow->nw_tos &= ~IP_DSCP_MASK;
- flow->nw_tos |= pdscp->dscp;
}
if (ofport->tnl_port) {
}
if (ofport->tnl_port) {
static bool facet_is_controller_flow(struct facet *);
static bool facet_is_controller_flow(struct facet *);
+/* Node in 'ofport_dpif''s 'priorities' map. Used to maintain a map from
+ * 'priority' (the datapath's term for QoS queue) to the dscp bits which all
+ * traffic egressing the 'ofport' with that priority should be marked with. */
+struct priority_to_dscp {
+ struct hmap_node hmap_node; /* Node in 'ofport_dpif''s 'priorities' map. */
+ uint32_t priority; /* Priority of this queue (see struct flow). */
+
+ uint8_t dscp; /* DSCP bits to mark outgoing traffic with. */
+};
+
/* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
*
* This is deprecated. It is only for compatibility with broken device drivers
/* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
*
* This is deprecated. It is only for compatibility with broken device drivers
return dpif_queue_to_priority(ofproto->backer->dpif, queue_id, priority);
}
return dpif_queue_to_priority(ofproto->backer->dpif, queue_id, priority);
}
-struct priority_to_dscp *
+static struct priority_to_dscp *
get_priority(const struct ofport_dpif *ofport, uint32_t priority)
{
struct priority_to_dscp *pdscp;
get_priority(const struct ofport_dpif *ofport, uint32_t priority)
{
struct priority_to_dscp *pdscp;
+bool
+ofproto_dpif_dscp_from_priority(const struct ofport_dpif *ofport,
+ uint32_t priority, uint8_t *dscp)
+{
+ struct priority_to_dscp *pdscp = get_priority(ofport, priority);
+ *dscp = pdscp ? pdscp->dscp : 0;
+ return pdscp != NULL;
+}
+
static void
ofport_clear_priorities(struct ofport_dpif *ofport)
{
static void
ofport_clear_priorities(struct ofport_dpif *ofport)
{
int64_t byte_count; /* Number of bytes sent. */
};
int64_t byte_count; /* Number of bytes sent. */
};
-/* Node in 'ofport_dpif''s 'priorities' map. Used to maintain a map from
- * 'priority' (the datapath's term for QoS queue) to the dscp bits which all
- * traffic egressing the 'ofport' with that priority should be marked with. */
-struct priority_to_dscp {
- struct hmap_node hmap_node; /* Node in 'ofport_dpif''s 'priorities' map. */
- uint32_t priority; /* Priority of this queue (see struct flow). */
-
- uint8_t dscp; /* DSCP bits to mark outgoing traffic with. */
-};
-
static inline struct rule_dpif *rule_dpif_cast(const struct rule *rule)
{
return rule ? CONTAINER_OF(rule, struct rule_dpif, up) : NULL;
static inline struct rule_dpif *rule_dpif_cast(const struct rule *rule)
{
return rule ? CONTAINER_OF(rule, struct rule_dpif, up) : NULL;
uint16_t realdev_ofp_port,
ovs_be16 vlan_tci);
uint16_t realdev_ofp_port,
ovs_be16 vlan_tci);
-struct priority_to_dscp *get_priority(const struct ofport_dpif *,
- uint32_t priority);
+bool ofproto_dpif_dscp_from_priority(const struct ofport_dpif *,
+ uint32_t priority, uint8_t *dscp);
int ofproto_dpif_queue_to_priority(const struct ofproto_dpif *,
uint32_t queue_id, uint32_t *priority);
int ofproto_dpif_queue_to_priority(const struct ofproto_dpif *,
uint32_t queue_id, uint32_t *priority);