mirror of
https://github.com/openvswitch/ovs
synced 2025-09-03 07:45:30 +00:00
ofp-actions: Add truncate action.
The patch adds a new action to support packet truncation. The new action is formatted as 'output(port=n,max_len=m)', as output to port n, with packet size being MIN(original_size, m). One use case is to enable port mirroring to send smaller packets to the destination port so that only useful packet information is mirrored/copied, saving some performance overhead of copying entire packet payload. Example use case is below as well as shown in the testcases: - Output to port 1 with max_len 100 bytes. - The output packet size on port 1 will be MIN(original_packet_size, 100). # ovs-ofctl add-flow br0 'actions=output(port=1,max_len=100)' - The scope of max_len is limited to output action itself. The following packet size of output:1 and output:2 will be intact. # ovs-ofctl add-flow br0 \ 'actions=output(port=1,max_len=100),output:1,output:2' - The Datapath actions shows: # Datapath actions: trunc(100),1,1,2 Tested-at: https://travis-ci.org/williamtu/ovs-travis/builds/140037134 Signed-off-by: William Tu <u9012063@gmail.com> Acked-by: Pravin B Shelar <pshelar@ovn.org>
This commit is contained in:
committed by
Pravin B Shelar
parent
4c7804f14b
commit
aaca4fe0ce
@@ -503,6 +503,7 @@ requires_datapath_assistance(const struct nlattr *a)
|
||||
case OVS_ACTION_ATTR_HASH:
|
||||
case OVS_ACTION_ATTR_PUSH_MPLS:
|
||||
case OVS_ACTION_ATTR_POP_MPLS:
|
||||
case OVS_ACTION_ATTR_TRUNC:
|
||||
return false;
|
||||
|
||||
case OVS_ACTION_ATTR_UNSPEC:
|
||||
@@ -625,6 +626,17 @@ odp_execute_actions(void *dp, struct dp_packet_batch *batch, bool steal,
|
||||
}
|
||||
break;
|
||||
|
||||
case OVS_ACTION_ATTR_TRUNC: {
|
||||
const struct ovs_action_trunc *trunc =
|
||||
nl_attr_get_unspec(a, sizeof *trunc);
|
||||
|
||||
batch->trunc = true;
|
||||
for (i = 0; i < cnt; i++) {
|
||||
dp_packet_set_cutlen(packets[i], trunc->max_len);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case OVS_ACTION_ATTR_OUTPUT:
|
||||
case OVS_ACTION_ATTR_TUNNEL_PUSH:
|
||||
case OVS_ACTION_ATTR_TUNNEL_POP:
|
||||
|
Reference in New Issue
Block a user