mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
datapath: Don't track IP TOS value two different ways.
Originally, the datapath didn't care about IP TOS at all. Then, to support NetFlow, we made it keep track of the last-seen IP TOS value on a per-flow basis. Then, to support OpenFlow 1.0, we added a nw_tos field to odp_flow_key. We don't need both methods, so this commit drops the NetFlow-specific tracking. This introduces a small kernel ABI break: upgrading the kernel module without upgrading the OVS userspace will mean that NetFlow records will all show an IP TOS value of 0. I don't consider that to be a serious problem.
This commit is contained in:
@@ -102,7 +102,6 @@ struct dp_netdev_flow {
|
||||
struct timespec used; /* Last used time. */
|
||||
long long int packet_count; /* Number of packets matched. */
|
||||
long long int byte_count; /* Number of bytes matched. */
|
||||
uint8_t ip_tos; /* IP TOS value. */
|
||||
uint16_t tcp_ctl; /* Bitwise-OR of seen tcp_ctl values. */
|
||||
|
||||
/* Actions. */
|
||||
@@ -682,7 +681,7 @@ answer_flow_query(struct dp_netdev_flow *flow, uint32_t query_flags,
|
||||
odp_flow->stats.used_sec = flow->used.tv_sec;
|
||||
odp_flow->stats.used_nsec = flow->used.tv_nsec;
|
||||
odp_flow->stats.tcp_flags = TCP_FLAGS(flow->tcp_ctl);
|
||||
odp_flow->stats.ip_tos = flow->ip_tos;
|
||||
odp_flow->stats.reserved = 0;
|
||||
odp_flow->stats.error = 0;
|
||||
if (odp_flow->n_actions > 0) {
|
||||
unsigned int n = MIN(odp_flow->n_actions, flow->n_actions);
|
||||
@@ -829,7 +828,6 @@ clear_stats(struct dp_netdev_flow *flow)
|
||||
flow->used.tv_nsec = 0;
|
||||
flow->packet_count = 0;
|
||||
flow->byte_count = 0;
|
||||
flow->ip_tos = 0;
|
||||
flow->tcp_ctl = 0;
|
||||
}
|
||||
|
||||
@@ -1006,14 +1004,9 @@ dp_netdev_flow_used(struct dp_netdev_flow *flow, const flow_t *key,
|
||||
time_timespec(&flow->used);
|
||||
flow->packet_count++;
|
||||
flow->byte_count += packet->size;
|
||||
if (key->dl_type == htons(ETH_TYPE_IP)) {
|
||||
struct ip_header *nh = packet->l3;
|
||||
flow->ip_tos = nh->ip_tos;
|
||||
|
||||
if (key->nw_proto == IPPROTO_TCP) {
|
||||
struct tcp_header *th = packet->l4;
|
||||
flow->tcp_ctl |= th->tcp_ctl;
|
||||
}
|
||||
if (key->dl_type == htons(ETH_TYPE_IP) && key->nw_proto == IPPROTO_TCP) {
|
||||
struct tcp_header *th = packet->l4;
|
||||
flow->tcp_ctl |= th->tcp_ctl;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user