[ovs-dev] [PATCH v2] ovs-dpctl: Don't print mask when all fields exact-match.
Ben Pfaff
blp at nicira.com
Thu Jun 19 00:48:03 UTC 2014
I don't think that Arun is working on Open vSwitch any longer. (I don't
know anything about Atul.)
I have an improved version of this in a private branch that I'll get around
to finishing up one of these days. (Not this week, I'm on vacation.)
On Jun 18, 2014 5:34 PM, "Joe Stringer" <joestringer at nicira.com> wrote:
> It seems like this has fallen through the gaps. If it's still relevant,
> then it would need a rebase against master.
>
>
> On 2 May 2014 20:58, Arun Sharma <arun.sharma at calsoftinc.com> wrote:
>
>> For each field, if the mask is all zeros, don't print it at all,
>> if it is all ones, print it without the mask trailer.
>> If it is neither of those two, print the value and mask in the current
>> form.
>>
>> Removed inconsistency in format 0x% and %#, kept %# for mask as hex
>> format.
>>
>> Bug# 1191729
>>
>> Reported-by: Justin Pettit <jpettit at nicira.com>
>> Signed-off-by: Arun Sharma <arun.sharma at calsoftinc.com>
>>
>> ---
>> v2
>> * Rewrite comparison condition to "(a != b)" from "((a ^ b) != 0)"
>> * Rebase
>> ---
>> lib/odp-util.c | 412
>> +++++++++++++++++++++++++++++++++++++------------
>> lib/odp-util.h | 36 +++++
>> tests/odp.at | 12 +-
>> tests/ofproto-dpif.at | 133 ++++++++--------
>> tests/tunnel.at | 56 +++----
>> 5 files changed, 452 insertions(+), 197 deletions(-)
>>
>> diff --git a/lib/odp-util.c b/lib/odp-util.c
>> index af464a0..f78f774 100644
>> --- a/lib/odp-util.c
>> +++ b/lib/odp-util.c
>> @@ -345,6 +345,33 @@ format_vlan_tci(struct ds *ds, ovs_be16 vlan_tci)
>> }
>>
>> static void
>> +format_vlan_tci_with_mask(struct ds *ds, ovs_be16 vlan_tci,
>> + ovs_be16 mask)
>> +{
>> + if (vlan_tci_to_vid(mask) != 0) {
>> + ds_put_format(ds, "vid=%"PRIu16, vlan_tci_to_vid(vlan_tci));
>> + if (vlan_tci_to_vid(mask) != (VLAN_VID_MASK >> VLAN_VID_SHIFT)) {
>> + ds_put_format(ds, "/%#"PRIx16, vlan_tci_to_vid(mask));
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> + if (vlan_tci_to_pcp(mask) != 0) {
>> + ds_put_format(ds, "pcp=%d", vlan_tci_to_pcp(vlan_tci));
>> + if (vlan_tci_to_pcp(mask) != (VLAN_PCP_MASK >> VLAN_PCP_SHIFT)) {
>> + ds_put_format(ds, "/%#x", vlan_tci_to_pcp(mask));
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> + if (vlan_tci_to_cfi(mask) != 0) {
>> + ds_put_format(ds, "cfi=%d", vlan_tci_to_cfi(vlan_tci));
>> + if (vlan_tci_to_cfi(mask) != (VLAN_CFI >> VLAN_CFI_SHIFT)) {
>> + ds_put_format(ds, "/%d", vlan_tci_to_cfi(mask));
>> + }
>> + }
>> + ds_chomp(ds, ',');
>> +}
>> +
>> +static void
>> format_mpls_lse(struct ds *ds, ovs_be32 mpls_lse)
>> {
>> ds_put_format(ds, "label=%"PRIu32",tc=%d,ttl=%d,bos=%d",
>> @@ -355,6 +382,42 @@ format_mpls_lse(struct ds *ds, ovs_be32 mpls_lse)
>> }
>>
>> static void
>> +format_mpls_lse_with_mask(struct ds *ds, ovs_be32 mpls_lse, ovs_be32
>> mask)
>> +{
>> + if (mpls_lse_to_label(mask) != 0) {
>> + ds_put_format(ds, "label=%"PRIu32, mpls_lse_to_label(mpls_lse));
>> + if (mpls_lse_to_label(mask) != (MPLS_LABEL_MASK >>
>> MPLS_LABEL_SHIFT)) {
>> + ds_put_format(ds, "/%#x", mpls_lse_to_label(mask));
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +
>> + if (mpls_lse_to_tc(mask) != 0) {
>> + ds_put_format(ds, "tc=%d", mpls_lse_to_tc(mpls_lse));
>> + if (mpls_lse_to_tc(mask) != (MPLS_TC_MASK >> MPLS_TC_SHIFT)) {
>> + ds_put_format(ds, "/%x", mpls_lse_to_tc(mask));
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +
>> + if (mpls_lse_to_ttl(mask) != 0) {
>> + ds_put_format(ds, "ttl=%d", mpls_lse_to_ttl(mpls_lse));
>> + if (mpls_lse_to_ttl(mask) != (MPLS_TTL_MASK >> MPLS_TTL_SHIFT)) {
>> + ds_put_format(ds, "/%#x", mpls_lse_to_ttl(mask));
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +
>> + if (mpls_lse_to_bos(mask) != 0) {
>> + ds_put_format(ds, "bos=%d", mpls_lse_to_bos(mpls_lse));
>> + if (mpls_lse_to_bos(mask) != (MPLS_BOS_MASK >> MPLS_BOS_SHIFT)) {
>> + ds_put_format(ds, "/%x", mpls_lse_to_bos(mask));
>> + }
>> + }
>> + ds_chomp(ds, ',');
>> +}
>> +
>> +static void
>> format_mpls(struct ds *ds, const struct ovs_key_mpls *mpls_key,
>> const struct ovs_key_mpls *mpls_mask, int n)
>> {
>> @@ -365,12 +428,7 @@ format_mpls(struct ds *ds, const struct ovs_key_mpls
>> *mpls_key,
>> format_mpls_lse(ds, key);
>> } else {
>> ovs_be32 mask = mpls_mask->mpls_lse;
>> -
>> - ds_put_format(ds,
>> "label=%"PRIu32"/0x%x,tc=%d/%x,ttl=%d/0x%x,bos=%d/%x",
>> - mpls_lse_to_label(key),
>> mpls_lse_to_label(mask),
>> - mpls_lse_to_tc(key), mpls_lse_to_tc(mask),
>> - mpls_lse_to_ttl(key), mpls_lse_to_ttl(mask),
>> - mpls_lse_to_bos(key), mpls_lse_to_bos(mask));
>> + format_mpls_lse_with_mask(ds, key, mask);
>> }
>> } else {
>> int i;
>> @@ -1001,6 +1059,180 @@ odp_portno_names_destroy(struct hmap
>> *portno_names)
>> }
>> }
>>
>> +void
>> +odp_ds_put_8_using_fmt(struct ds *ds, const char *field,
>> + uint8_t value, const char *value_fmt,
>> + uint8_t mask, const char *mask_fmt)
>> +{
>> + if ((mask & 0xff) != 0) {
>> + char *value_fmt_str = xmalloc(strlen(value_fmt) + 4);
>> + snprintf(value_fmt_str, sizeof(value_fmt_str), "%%s=%s",
>> value_fmt);
>> + ds_put_format(ds, value_fmt_str, field, value);
>> + free(value_fmt_str);
>> + if (mask != 0xff) {
>> + char *mask_fmt_str = xmalloc(strlen(mask_fmt) + 2);
>> + snprintf(mask_fmt_str, sizeof(mask_fmt_str), "/%s",
>> mask_fmt);
>> + ds_put_format(ds, mask_fmt_str, mask);
>> + free(mask_fmt_str);
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +}
>> +
>> +void
>> +odp_ds_put_8(struct ds *ds, const char *field, uint8_t value, uint8_t
>> mask)
>> +{
>> + const char *value_fmt = "%"PRIu8;
>> + const char *mask_fmt = "%#"PRIx8;
>> + odp_ds_put_8_using_fmt(ds, field, value, value_fmt, mask, mask_fmt);
>> +}
>> +
>> +void
>> +odp_ds_put_16_using_fmt(struct ds *ds, const char *field,
>> + ovs_be16 value, const char *value_fmt,
>> + ovs_be16 mask, const char *mask_fmt)
>> +{
>> + if (mask != htons(0)) {
>> + char *value_fmt_str = xmalloc(strlen(value_fmt) + 4);
>> + snprintf(value_fmt_str, sizeof(value_fmt_str), "%%s=%s",
>> value_fmt);
>> + ds_put_format(ds, value_fmt_str, field, ntohs(value));
>> + free(value_fmt_str);
>> + if (mask != OVS_BE16_MAX) {
>> + char *mask_fmt_str = xmalloc(strlen(mask_fmt) + 2);
>> + snprintf(mask_fmt_str, sizeof(mask_fmt_str), "/%s",
>> mask_fmt);
>> + ds_put_format(ds, mask_fmt_str, ntohs(mask));
>> + free(mask_fmt_str);
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +}
>> +
>> +void
>> +odp_ds_put_16(struct ds *ds, const char *field, ovs_be16 value, ovs_be16
>> mask)
>> +{
>> + const char *value_fmt = "%"PRIu16;
>> + const char *mask_fmt = "%#"PRIx16;
>> + odp_ds_put_16_using_fmt(ds, field, value, value_fmt, mask, mask_fmt);
>> +}
>> +
>> +void
>> +odp_ds_put_32_using_fmt(struct ds *ds, const char *field,
>> + ovs_be32 value, const char *value_fmt,
>> + ovs_be32 mask, const char *mask_fmt)
>> +{
>> + if (mask != htonl(0)) {
>> + char *value_fmt_str = xmalloc(strlen(value_fmt) + 4);
>> + snprintf(value_fmt_str, sizeof(value_fmt_str), "%%s=%s",
>> value_fmt);
>> + ds_put_format(ds, value_fmt_str, field, ntohl(value));
>> + free(value_fmt_str);
>> + if (mask != OVS_BE32_MAX) {
>> + char *mask_fmt_str = xmalloc(strlen(mask_fmt) + 2);
>> + snprintf(mask_fmt_str, sizeof(mask_fmt_str), "/%s",
>> mask_fmt);
>> + ds_put_format(ds, mask_fmt_str, ntohl(mask));
>> + free(mask_fmt_str);
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +}
>> +
>> +void
>> +odp_ds_put_32(struct ds *ds, const char *field, ovs_be32 value, ovs_be32
>> mask)
>> +{
>> + const char *value_fmt = "%"PRIu32;
>> + const char *mask_fmt = "%#"PRIx32;
>> + odp_ds_put_32_using_fmt(ds, field, value, value_fmt, mask, mask_fmt);
>> +}
>> +
>> +void
>> +odp_ds_put_64(struct ds *ds, const char *field,
>> + ovs_be64 value, ovs_be64 mask)
>> +{
>> + if (mask != htonll(0)) {
>> + ds_put_format(ds, "%s=%#"PRIx64, field, ntohll(value));
>> + if (mask != OVS_BE64_MAX) {
>> + ds_put_format(ds, "/%#"PRIx64, ntohll(mask));
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +}
>> +
>> +void
>> +odp_ds_put_64_using_fmt(struct ds *ds, const char *field,
>> + ovs_be64 value, char *value_fmt,
>> + ovs_be64 mask, char *mask_fmt)
>> +{
>> + if (mask != htonll(0)) {
>> + char *value_fmt_str = xmalloc(strlen(value_fmt) + 4);
>> + snprintf(value_fmt_str, sizeof(value_fmt_str), "%%s=%s",
>> value_fmt);
>> + ds_put_format(ds, value_fmt_str, field, ntohll(value));
>> + free(value_fmt_str);
>> + if (mask != OVS_BE64_MAX) {
>> + char *mask_fmt_str = xmalloc(strlen(mask_fmt) + 2);
>> + snprintf(mask_fmt_str, sizeof(mask_fmt_str), "/%s",
>> mask_fmt);
>> + ds_put_format(ds, mask_fmt_str, ntohll(mask));
>> + free(mask_fmt_str);
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +}
>> +
>> +void
>> +odp_ds_put_ip(struct ds *ds, const char *field,
>> + const ovs_be32 value, const ovs_be32 mask)
>> +{
>> + if (mask != htonl(0)) {
>> + ds_put_format(ds, "%s="IP_FMT"", field, IP_ARGS(value));
>> + if (mask != OVS_BE32_MAX) {
>> + ds_put_format(ds, "/"IP_FMT"", IP_ARGS(mask));
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +}
>> +
>> +void
>> +odp_ds_put_ip6(struct ds *ds, const char *field, const ovs_be32 value[4],
>> + const ovs_be32 mask[4])
>> +{
>> + if (!ipv6_mask_is_any((const struct in6_addr *)mask)) {
>> + char ip6_str[INET6_ADDRSTRLEN];
>> + inet_ntop(AF_INET6, value, ip6_str, sizeof ip6_str);
>> + ds_put_format(ds, "%s=%s", field, ip6_str);
>> + if (!ipv6_mask_is_exact((const struct in6_addr *) mask)) {
>> + char ip6_mask_str[INET6_ADDRSTRLEN];
>> + inet_ntop(AF_INET6, mask, ip6_mask_str, sizeof ip6_mask_str);
>> + ds_put_format(ds, "/%s", ip6_mask_str);
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +}
>> +
>> +void
>> +odp_ds_put_mac(struct ds *ds, const char *field,
>> + const uint8_t value[ETH_ADDR_LEN],
>> + const uint8_t mask[ETH_ADDR_LEN])
>> +{
>> + if (!eth_addr_is_zero(mask)) {
>> + ds_put_format(ds, "%s="ETH_ADDR_FMT"", field,
>> ETH_ADDR_ARGS(value));
>> + if (mask && !eth_mask_is_exact(mask)) {
>> + ds_put_format(ds, "/"ETH_ADDR_FMT"", ETH_ADDR_ARGS(mask));
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +}
>> +
>> +void
>> +odp_ds_put_str_mask_8(struct ds *ds, const char *field, const char
>> *value,
>> + uint8_t mask)
>> +{
>> + if ((mask & 0xff) != 0) {
>> + ds_put_format(ds, "%s=%s", field, value);
>> + if (mask != 0xff) {
>> + ds_put_format(ds, "/%#"PRIx8, mask);
>> + }
>> + ds_put_char(ds, ',');
>> + }
>> +}
>> +
>> static void
>> format_odp_key_attr(const struct nlattr *a, const struct nlattr *ma,
>> const struct hmap *portno_names, struct ds *ds,
>> @@ -1074,16 +1306,19 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>>
>> memset(&tun_mask, 0, sizeof tun_mask);
>> odp_tun_key_from_attr(ma, &tun_mask);
>> - ds_put_format(ds, "tun_id=%#"PRIx64"/%#"PRIx64
>> - ",src="IP_FMT"/"IP_FMT",dst="IP_FMT"/"IP_FMT
>> - ",tos=%#"PRIx8"/%#"PRIx8",ttl=%"PRIu8"/%#"PRIx8
>> - ",flags(",
>> - ntohll(tun_key.tun_id),
>> ntohll(tun_mask.tun_id),
>> - IP_ARGS(tun_key.ip_src),
>> IP_ARGS(tun_mask.ip_src),
>> - IP_ARGS(tun_key.ip_dst),
>> IP_ARGS(tun_mask.ip_dst),
>> - tun_key.ip_tos, tun_mask.ip_tos,
>> - tun_key.ip_ttl, tun_mask.ip_ttl);
>>
>> + odp_ds_put_64_using_fmt(ds, "tun_id", tun_key.tun_id,
>> "%#"PRIx64,
>> + tun_mask.tun_id, "%#"PRIx64);
>> +
>> + odp_ds_put_ip(ds, "src", tun_key.ip_src, tun_mask.ip_src);
>> + odp_ds_put_ip(ds, "dst", tun_key.ip_dst, tun_mask.ip_dst);
>> +
>> + odp_ds_put_8_using_fmt(ds, "tos", tun_key.ip_tos, "%#"PRIx8,
>> + tun_mask.ip_tos, "%#"PRIx8);
>> +
>> + odp_ds_put_8(ds, "ttl", tun_key.ip_ttl, tun_mask.ip_ttl);
>> +
>> + ds_put_format(ds, "flags(");
>> format_flags(ds, flow_tun_flag_to_string, tun_key.flags,
>> ',');
>>
>> /* XXX This code is correct, but enabling it would break the
>> unit
>> @@ -1094,8 +1329,8 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> */
>> ds_put_char(ds, ')');
>> } else {
>> - ds_put_format(ds,
>> "tun_id=0x%"PRIx64",src="IP_FMT",dst="IP_FMT","
>> - "tos=0x%"PRIx8",ttl=%"PRIu8",flags(",
>> + ds_put_format(ds,
>> "tun_id=%#"PRIx64",src="IP_FMT",dst="IP_FMT","
>> + "tos=%#"PRIx8",ttl=%"PRIu8",flags(",
>> ntohll(tun_key.tun_id),
>> IP_ARGS(tun_key.ip_src),
>> IP_ARGS(tun_key.ip_dst),
>> @@ -1125,15 +1360,11 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>>
>> case OVS_KEY_ATTR_ETHERNET:
>> if (!is_exact) {
>> - const struct ovs_key_ethernet *eth_mask = nl_attr_get(ma);
>> const struct ovs_key_ethernet *eth_key = nl_attr_get(a);
>> -
>> - ds_put_format(ds, "src="ETH_ADDR_FMT"/"ETH_ADDR_FMT
>> - ",dst="ETH_ADDR_FMT"/"ETH_ADDR_FMT,
>> - ETH_ADDR_ARGS(eth_key->eth_src),
>> - ETH_ADDR_ARGS(eth_mask->eth_src),
>> - ETH_ADDR_ARGS(eth_key->eth_dst),
>> - ETH_ADDR_ARGS(eth_mask->eth_dst));
>> + const struct ovs_key_ethernet *eth_mask = nl_attr_get(ma);
>> + odp_ds_put_mac(ds, "src", eth_key->eth_src,
>> eth_mask->eth_src);
>> + odp_ds_put_mac(ds, "dst", eth_key->eth_dst,
>> eth_mask->eth_dst);
>> + ds_chomp(ds, ',');
>> } else {
>> const struct ovs_key_ethernet *eth_key = nl_attr_get(a);
>>
>> @@ -1148,13 +1379,7 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> ovs_be16 vlan_tci = nl_attr_get_be16(a);
>> if (!is_exact) {
>> ovs_be16 mask = nl_attr_get_be16(ma);
>> - ds_put_format(ds,
>> "vid=%"PRIu16"/0x%"PRIx16",pcp=%d/0x%x,cfi=%d/%d",
>> - vlan_tci_to_vid(vlan_tci),
>> - vlan_tci_to_vid(mask),
>> - vlan_tci_to_pcp(vlan_tci),
>> - vlan_tci_to_pcp(mask),
>> - vlan_tci_to_cfi(vlan_tci),
>> - vlan_tci_to_cfi(mask));
>> + format_vlan_tci_with_mask(ds, vlan_tci, mask);
>> } else {
>> format_vlan_tci(ds, vlan_tci);
>> }
>> @@ -1196,18 +1421,20 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> const struct ovs_key_ipv4 *ipv4_key = nl_attr_get(a);
>> const struct ovs_key_ipv4 *ipv4_mask = nl_attr_get(ma);
>>
>> - ds_put_format(ds, "src="IP_FMT"/"IP_FMT",dst="IP_FMT"/"IP_FMT
>> -
>> ",proto=%"PRIu8"/%#"PRIx8",tos=%#"PRIx8"/%#"PRIx8
>> - ",ttl=%"PRIu8"/%#"PRIx8",frag=%s/%#"PRIx8,
>> - IP_ARGS(ipv4_key->ipv4_src),
>> - IP_ARGS(ipv4_mask->ipv4_src),
>> - IP_ARGS(ipv4_key->ipv4_dst),
>> - IP_ARGS(ipv4_mask->ipv4_dst),
>> - ipv4_key->ipv4_proto, ipv4_mask->ipv4_proto,
>> - ipv4_key->ipv4_tos, ipv4_mask->ipv4_tos,
>> - ipv4_key->ipv4_ttl, ipv4_mask->ipv4_ttl,
>> - ovs_frag_type_to_string(ipv4_key->ipv4_frag),
>> - ipv4_mask->ipv4_frag);
>> + odp_ds_put_ip(ds, "src", ipv4_key->ipv4_src,
>> ipv4_mask->ipv4_src);
>> + odp_ds_put_ip(ds, "dst", ipv4_key->ipv4_dst,
>> ipv4_mask->ipv4_dst);
>> + odp_ds_put_8(ds, "proto", ipv4_key->ipv4_proto,
>> + ipv4_mask->ipv4_proto);
>> +
>> + odp_ds_put_8_using_fmt(ds, "tos", ipv4_key->ipv4_tos,
>> "%#"PRIx8,
>> + ipv4_mask->ipv4_tos, "%#"PRIx8);
>> +
>> + odp_ds_put_8(ds, "ttl", ipv4_key->ipv4_ttl,
>> ipv4_mask->ipv4_ttl);
>> +
>> + odp_ds_put_str_mask_8(ds, "frag",
>> +
>> ovs_frag_type_to_string(ipv4_key->ipv4_frag),
>> + ipv4_mask->ipv4_frag);
>> + ds_chomp(ds, ',');
>> } else {
>> const struct ovs_key_ipv4 *ipv4_key = nl_attr_get(a);
>>
>> @@ -1224,30 +1451,27 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> case OVS_KEY_ATTR_IPV6:
>> if (!is_exact) {
>> const struct ovs_key_ipv6 *ipv6_key, *ipv6_mask;
>> - char src_str[INET6_ADDRSTRLEN];
>> - char dst_str[INET6_ADDRSTRLEN];
>> - char src_mask[INET6_ADDRSTRLEN];
>> - char dst_mask[INET6_ADDRSTRLEN];
>> -
>> ipv6_key = nl_attr_get(a);
>> - inet_ntop(AF_INET6, ipv6_key->ipv6_src, src_str, sizeof
>> src_str);
>> - inet_ntop(AF_INET6, ipv6_key->ipv6_dst, dst_str, sizeof
>> dst_str);
>> -
>> ipv6_mask = nl_attr_get(ma);
>> - inet_ntop(AF_INET6, ipv6_mask->ipv6_src, src_mask, sizeof
>> src_mask);
>> - inet_ntop(AF_INET6, ipv6_mask->ipv6_dst, dst_mask, sizeof
>> dst_mask);
>> -
>> - ds_put_format(ds,
>> "src=%s/%s,dst=%s/%s,label=%#"PRIx32"/%#"PRIx32
>> -
>> ",proto=%"PRIu8"/%#"PRIx8",tclass=%#"PRIx8"/%#"PRIx8
>> - ",hlimit=%"PRIu8"/%#"PRIx8",frag=%s/%#"PRIx8,
>> - src_str, src_mask, dst_str, dst_mask,
>> - ntohl(ipv6_key->ipv6_label),
>> - ntohl(ipv6_mask->ipv6_label),
>> - ipv6_key->ipv6_proto, ipv6_mask->ipv6_proto,
>> - ipv6_key->ipv6_tclass, ipv6_mask->ipv6_tclass,
>> - ipv6_key->ipv6_hlimit, ipv6_mask->ipv6_hlimit,
>> - ovs_frag_type_to_string(ipv6_key->ipv6_frag),
>> - ipv6_mask->ipv6_frag);
>> + odp_ds_put_ip6(ds, "src", ipv6_key->ipv6_src,
>> ipv6_mask->ipv6_src);
>> + odp_ds_put_ip6(ds, "dst", ipv6_key->ipv6_dst,
>> ipv6_mask->ipv6_dst);
>> +
>> + odp_ds_put_32_using_fmt(ds, "label",
>> + ipv6_key->ipv6_label, "%#"PRIx32,
>> + ipv6_mask->ipv6_label, "%#"PRIx32);
>> + odp_ds_put_8(ds, "proto", ipv6_key->ipv6_proto,
>> + ipv6_mask->ipv6_proto);
>> +
>> + odp_ds_put_8_using_fmt(ds, "tclass",
>> + ipv6_key->ipv6_tclass, "%#"PRIx8,
>> + ipv6_mask->ipv6_tclass, "%#"PRIx8);
>> + odp_ds_put_8(ds, "hlimit", ipv6_key->ipv6_hlimit,
>> + ipv6_mask->ipv6_hlimit);
>> +
>> + odp_ds_put_str_mask_8(ds, "frag",
>> +
>> ovs_frag_type_to_string(ipv6_key->ipv6_frag),
>> + ipv6_mask->ipv6_frag);
>> + ds_chomp(ds, ',');
>> } else {
>> const struct ovs_key_ipv6 *ipv6_key;
>> char src_str[INET6_ADDRSTRLEN];
>> @@ -1271,10 +1495,9 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> const struct ovs_key_tcp *tcp_mask = nl_attr_get(ma);
>> const struct ovs_key_tcp *tcp_key = nl_attr_get(a);
>>
>> - ds_put_format(ds, "src=%"PRIu16"/%#"PRIx16
>> - ",dst=%"PRIu16"/%#"PRIx16,
>> - ntohs(tcp_key->tcp_src),
>> ntohs(tcp_mask->tcp_src),
>> - ntohs(tcp_key->tcp_dst),
>> ntohs(tcp_mask->tcp_dst));
>> + odp_ds_put_16(ds, "src", tcp_key->tcp_src,
>> tcp_mask->tcp_src);
>> + odp_ds_put_16(ds, "dst", tcp_key->tcp_dst,
>> tcp_mask->tcp_dst);
>> + ds_chomp(ds, ',');
>> } else {
>> const struct ovs_key_tcp *tcp_key = nl_attr_get(a);
>>
>> @@ -1295,10 +1518,9 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> const struct ovs_key_udp *udp_mask = nl_attr_get(ma);
>> const struct ovs_key_udp *udp_key = nl_attr_get(a);
>>
>> - ds_put_format(ds, "src=%"PRIu16"/%#"PRIx16
>> - ",dst=%"PRIu16"/%#"PRIx16,
>> - ntohs(udp_key->udp_src),
>> ntohs(udp_mask->udp_src),
>> - ntohs(udp_key->udp_dst),
>> ntohs(udp_mask->udp_dst));
>> + odp_ds_put_16(ds, "src", udp_key->udp_src,
>> udp_mask->udp_src);
>> + odp_ds_put_16(ds, "dst", udp_key->udp_dst,
>> udp_mask->udp_dst);
>> + ds_chomp(ds, ',');
>> } else {
>> const struct ovs_key_udp *udp_key = nl_attr_get(a);
>>
>> @@ -1312,10 +1534,9 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> const struct ovs_key_sctp *sctp_mask = nl_attr_get(ma);
>> const struct ovs_key_sctp *sctp_key = nl_attr_get(a);
>>
>> - ds_put_format(ds, "src=%"PRIu16"/%#"PRIx16
>> - ",dst=%"PRIu16"/%#"PRIx16,
>> - ntohs(sctp_key->sctp_src),
>> ntohs(sctp_mask->sctp_src),
>> - ntohs(sctp_key->sctp_dst),
>> ntohs(sctp_mask->sctp_dst));
>> + odp_ds_put_16(ds, "src", sctp_key->sctp_src,
>> sctp_mask->sctp_src);
>> + odp_ds_put_16(ds, "dst", sctp_key->sctp_dst,
>> sctp_mask->sctp_dst);
>> + ds_chomp(ds, ',');
>> } else {
>> const struct ovs_key_sctp *sctp_key = nl_attr_get(a);
>>
>> @@ -1329,9 +1550,11 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> const struct ovs_key_icmp *icmp_mask = nl_attr_get(ma);
>> const struct ovs_key_icmp *icmp_key = nl_attr_get(a);
>>
>> - ds_put_format(ds,
>> "type=%"PRIu8"/%#"PRIx8",code=%"PRIu8"/%#"PRIx8,
>> - icmp_key->icmp_type, icmp_mask->icmp_type,
>> - icmp_key->icmp_code, icmp_mask->icmp_code);
>> + odp_ds_put_8(ds, "type", icmp_key->icmp_type,
>> + icmp_mask->icmp_type);
>> + odp_ds_put_8(ds, "code", icmp_key->icmp_code,
>> + icmp_mask->icmp_code);
>> + ds_chomp(ds, ',');
>> } else {
>> const struct ovs_key_icmp *icmp_key = nl_attr_get(a);
>>
>> @@ -1345,9 +1568,11 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> const struct ovs_key_icmpv6 *icmpv6_mask = nl_attr_get(ma);
>> const struct ovs_key_icmpv6 *icmpv6_key = nl_attr_get(a);
>>
>> - ds_put_format(ds,
>> "type=%"PRIu8"/%#"PRIx8",code=%"PRIu8"/%#"PRIx8,
>> - icmpv6_key->icmpv6_type,
>> icmpv6_mask->icmpv6_type,
>> - icmpv6_key->icmpv6_code,
>> icmpv6_mask->icmpv6_code);
>> + odp_ds_put_8(ds, "type", icmpv6_key->icmpv6_type,
>> + icmpv6_mask->icmpv6_type);
>> + odp_ds_put_8(ds, "code", icmpv6_key->icmpv6_code,
>> + icmpv6_mask->icmpv6_code);
>> + ds_chomp(ds, ',');
>> } else {
>> const struct ovs_key_icmpv6 *icmpv6_key = nl_attr_get(a);
>>
>> @@ -1361,19 +1586,12 @@ format_odp_key_attr(const struct nlattr *a, const
>> struct nlattr *ma,
>> const struct ovs_key_arp *arp_mask = nl_attr_get(ma);
>> const struct ovs_key_arp *arp_key = nl_attr_get(a);
>>
>> - ds_put_format(ds, "sip="IP_FMT"/"IP_FMT",tip="IP_FMT"/"IP_FMT
>> - ",op=%"PRIu16"/%#"PRIx16
>> - ",sha="ETH_ADDR_FMT"/"ETH_ADDR_FMT
>> - ",tha="ETH_ADDR_FMT"/"ETH_ADDR_FMT,
>> - IP_ARGS(arp_key->arp_sip),
>> - IP_ARGS(arp_mask->arp_sip),
>> - IP_ARGS(arp_key->arp_tip),
>> - IP_ARGS(arp_mask->arp_tip),
>> - ntohs(arp_key->arp_op),
>> ntohs(arp_mask->arp_op),
>> - ETH_ADDR_ARGS(arp_key->arp_sha),
>> - ETH_ADDR_ARGS(arp_mask->arp_sha),
>> - ETH_ADDR_ARGS(arp_key->arp_tha),
>> - ETH_ADDR_ARGS(arp_mask->arp_tha));
>> + odp_ds_put_ip(ds, "sip", arp_key->arp_sip,
>> arp_mask->arp_sip);
>> + odp_ds_put_ip(ds, "tip", arp_key->arp_tip,
>> arp_mask->arp_tip);
>> + odp_ds_put_16(ds, "op", arp_key->arp_op, arp_mask->arp_op);
>> + odp_ds_put_mac(ds, "sha", arp_key->arp_sha,
>> arp_mask->arp_sha);
>> + odp_ds_put_mac(ds, "tha", arp_key->arp_tha,
>> arp_mask->arp_tha);
>> + ds_chomp(ds, ',');
>> } else {
>> const struct ovs_key_arp *arp_key = nl_attr_get(a);
>>
>> diff --git a/lib/odp-util.h b/lib/odp-util.h
>> index 0dfbcca..edd8fe9 100644
>> --- a/lib/odp-util.h
>> +++ b/lib/odp-util.h
>> @@ -25,6 +25,7 @@
>> #include "hash.h"
>> #include "hmap.h"
>> #include "openflow/openflow.h"
>> +#include "packets.h"
>> #include "util.h"
>>
>> struct ds;
>> @@ -238,4 +239,39 @@ void odp_put_tunnel_action(const struct flow_tnl
>> *tunnel,
>> void odp_put_pkt_mark_action(const uint32_t pkt_mark,
>> struct ofpbuf *odp_actions);
>>
>> +void odp_ds_put_8_using_fmt(struct ds *ds, const char *field,
>> + uint8_t value, const char *value_fmt,
>> + uint8_t mask, const char *mask_fmt);
>> +void odp_ds_put_8(struct ds *ds, const char *field,
>> + uint8_t value, uint8_t mask);
>> +
>> +void odp_ds_put_16_using_fmt(struct ds *ds, const char *field,
>> + ovs_be16 value, const char *value_fmt,
>> + ovs_be16 mask, const char *mask_fmt);
>> +void odp_ds_put_16(struct ds *ds, const char *field,
>> + ovs_be16 value, ovs_be16 mask);
>> +
>> +void odp_ds_put_32_using_fmt(struct ds *ds, const char *field,
>> + ovs_be32 value, const char *value_fmt,
>> + ovs_be32 mask, const char *mask_fmt);
>> +void odp_ds_put_32(struct ds *ds, const char *field,
>> + ovs_be32 value, ovs_be32 mask);
>> +
>> +void odp_ds_put_64_using_fmt(struct ds *ds, const char *field,
>> + ovs_be64 value, char *value_fmt,
>> + ovs_be64 mask, char *mask_fmt);
>> +void odp_ds_put_64(struct ds *ds, const char *field,
>> + ovs_be64 value, ovs_be64 mask);
>> +
>> +void odp_ds_put_ip(struct ds *ds, const char *field,
>> + const ovs_be32 value, const ovs_be32 mask);
>> +void odp_ds_put_ip6(struct ds *ds, const char *field,
>> + const __be32 value[4], const __be32 mask[4]);
>> +void odp_ds_put_mac(struct ds *ds, const char *field,
>> + const uint8_t value[ETH_ADDR_LEN],
>> + const uint8_t mask[ETH_ADDR_LEN]);
>> +
>> +void odp_ds_put_str_mask_8(struct ds *ds, const char *field,
>> + const char * value, uint8_t mask);
>> +
>> #endif /* odp-util.h */
>> diff --git a/tests/odp.at b/tests/odp.at
>> index 26f561f..a36433b 100644
>> --- a/tests/odp.at
>> +++ b/tests/odp.at
>> @@ -42,7 +42,7 @@ s/^/skb_priority(0),skb_mark(0),/
>>
>> echo
>> echo '# Valid forms with tunnel header.'
>> - sed
>> 's/^/skb_priority(0),tunnel(tun_id=0x7f10354,src=10.10.10.10,dst=20.20.20.20,tos=0x0,ttl=64,flags(csum,key)),skb_mark(0x1234),/'
>> odp-base.txt
>> + sed
>> 's/^/skb_priority(0),tunnel(tun_id=0x7f10354,src=10.10.10.10,dst=20.20.20.20,tos=0,ttl=64,flags(csum,key)),skb_mark(0x1234),/'
>> odp-base.txt
>>
>> echo
>> echo '# Valid forms with VLAN header.'
>> @@ -104,11 +104,11 @@
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv
>>
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=6,tos=0,ttl=128,frag=no),tcp(src=80/0xff00,dst=8080/0xff)
>>
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=17,tos=0,ttl=128,frag=no),udp(src=81/0xff00,dst=6632/0xff)
>>
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=17,tos=0,ttl=128,frag=no),udp(src=81/0xff,dst=6632/0xff00)
>>
>> -in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=1,tos=0,ttl=128,frag=no),icmp(type=1/0xf0,code=2/0xff)
>>
>> +in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=1,tos=0,ttl=128,frag=no),icmp(type=1/0xf0,code=2/0xf0)
>>
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1/::255,dst=::2/::255,label=0/0xf0,proto=10/0xf0,tclass=0x70/0xf0,hlimit=128/0xf0,frag=no/0xf0)
>>
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=6,tclass=0,hlimit=128,frag=no),tcp(src=80/0xff00,dst=8080/0xff)
>>
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=17,tclass=0,hlimit=128,frag=no),udp(src=6630/0xff00,dst=22/0xff)
>>
>> -in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=1/0xf0,code=2/0xff)
>>
>> +in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=1/0xf0,code=2/0xf0)
>>
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=135,code=0),nd(target=::3/::250)
>>
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=135,code=0),nd(target=::3/::250,sll=00:05:06:07:08:09/ff:ff:ff:ff:ff:00)
>>
>> in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=136,code=0),nd(target=::3/::250,tll=00:0a:0b:0c:0d:0e/ff:ff:ff:ff:ff:00)
>> @@ -122,7 +122,7 @@
>> skb_mark(0x1234/0xfff0),in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:
>>
>> echo
>> echo '# Valid forms with tunnel header.'
>> - sed 's/^/tunnel(tun_id=0x7f10354\/0xff,src=10.10.10.10\/255.255.255.0
>> ,dst=20.20.20.20\/255.255.255.0,tos=0\/0xff,ttl=64\/0xff,flags(csum,key)),/'
>> odp-base.txt
>> + sed 's/^/tunnel(tun_id=0x7f10354\/0xf0,src=10.10.10.10\/255.255.255.0
>> ,dst=20.20.20.20\/255.255.255.0,tos=0\/0xf0,ttl=64\/0xf0,flags(csum,key)),/'
>> odp-base.txt
>>
>> echo
>> echo '# Valid forms with VLAN header.'
>> @@ -252,8 +252,8 @@ push_vlan(tpid=0x9100,vid=13,pcp=5)
>> push_vlan(tpid=0x9100,vid=13,pcp=5,cfi=0)
>> pop_vlan
>> sample(sample=9.7%,actions(1,2,3,push_vlan(vid=1,pcp=2)))
>>
>> -set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(df,csum,key)))
>>
>> -set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(key)))
>>
>> +set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,tos=0,ttl=64,flags(df,csum,key)))
>>
>> +set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,tos=0,ttl=64,flags(key)))
>> ])
>> AT_CHECK_UNQUOTED([ovstest test-odp parse-actions < actions.txt], [0],
>> [`cat actions.txt`
>> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
>> index c46e997..a658e90 100644
>> --- a/tests/ofproto-dpif.at
>> +++ b/tests/ofproto-dpif.at
>> @@ -46,10 +46,10 @@ ovs-appctl time/warp 100
>> sleep 1 # wait for forwarders process packets
>>
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -90,12 +90,12 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p7
>> 'in_port(7),eth(src=50:54:00:00:00:
>> ovs-appctl time/warp 100
>> ovs-appctl time/warp 100
>> AT_CHECK([cat ovs-vswitchd.log | grep 'in_port([[348]])' |
>> FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.3/0.0.0.0,dst=10.0.0.4/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(src=
>> 10.0.0.5/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(src=
>> 10.0.0.6/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=
>> 0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:09/00:00:00:00:00:00,tha=50:54:00:00:00:09/00:00:00:00:00:00),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(sip=
>> 0.0.0.0/0.0.0.0,tip=0.0.0.0/0.0.0.0,op=3/0,sha=50:54:00:00:00:0b/00:00:00:00:00:00,tha=50:54:00:00:00:0b/00:00:00:00:00:00),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0d),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0e),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:09,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(4),eth(src=50:54:00:00:00:0b,dst=ff:ff:ff:ff:ff:ff),eth_type(0x8035),arp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -3686,21 +3686,21 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p2
>> 'in_port(2),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p3
>> 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>
>> AT_CHECK([ovs-appctl dpif/dump-flows br0 | sort | STRIP_USED], [0], [dnl
>> -skb_priority(0),recirc_id(0),in_port(1),eth_type(0x0800),ipv4(src=
>> 192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions:drop
>> -skb_priority(0),recirc_id(0),in_port(2),eth_type(0x0800),ipv4(src=
>> 192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions:drop
>> +skb_priority(0),recirc_id(0),in_port(1),eth_type(0x0800),ipv4(frag=no),
>> packets:0, bytes:0, used:never, actions:drop
>> +skb_priority(0),recirc_id(0),in_port(2),eth_type(0x0800),ipv4(frag=no),
>> packets:0, bytes:0, used:never, actions:drop
>> ])
>>
>> AT_CHECK([ovs-appctl dpif/dump-flows br1 | sort | STRIP_USED], [0], [dnl
>> -skb_priority(0),recirc_id(0),in_port(3),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),
>> packets:0, bytes:0, used:never, actions:drop
>> +skb_priority(0),recirc_id(0),in_port(3),eth_type(0x0800),ipv4(frag=no),
>> packets:0, bytes:0, used:never, actions:drop
>> ])
>>
>> AT_CHECK([ovs-appctl dpif/dump-flows -m br0 | sort | STRIP_USED], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p1),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> packets:0, bytes:0, used:never, actions:drop
>>
>> -skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p2),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=0/0,code=0/0),
>> packets:0, bytes:0, used:never, actions:drop
>> +skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p1),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> packets:0, bytes:0, used:never, actions:drop
>> +skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p2),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> packets:0, bytes:0, used:never, actions:drop
>> ])
>>
>> AT_CHECK([ovs-appctl dpif/dump-flows -m br1 | sort | STRIP_USED], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> packets:0, bytes:0, used:never, actions:drop
>> +skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(p3),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> packets:0, bytes:0, used:never, actions:drop
>> ])
>>
>> OVS_VSWITCHD_STOP
>> @@ -3734,8 +3734,8 @@ for dl_src in 00 01; do
>> done
>> sleep 1 # wait for the datapath flow installed
>> for dl_src in 00 01; do
>> - AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep
>> ":$dl_src/" | STRIP_USED], [0], [dnl
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120),
>> actions:userspace(pid=0,slow_path(controller))
>> + AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep
>> ":$dl_src" | STRIP_USED], [0], [dnl
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120),
>> actions:userspace(pid=0,slow_path(controller))
>> ])
>> done
>>
>> @@ -3774,8 +3774,8 @@ for dl_src in 00 01; do
>> done
>> sleep 1 # wait for the datapath flow installed
>> for dl_src in 00 01; do
>> - AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep
>> ":$dl_src/" | STRIP_USED], [0], [dnl
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120),
>> actions:userspace(pid=0,slow_path(controller))
>> + AT_CHECK_UNQUOTED([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | grep
>> ":$dl_src" | STRIP_USED], [0], [dnl
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=60:66:66:66:66:$dl_src),eth_type(0x8847),mpls(lse0=0x14020,lse1=0x14120),
>> actions:userspace(pid=0,slow_path(controller))
>> ])
>> done
>>
>> @@ -3828,15 +3828,15 @@ dummy at ovs-dummy: hit:13 missed:2
>> ])
>>
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions:101,3,2
>>
>> -skb_priority(0),skb_mark(0/0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions:100,2,3
>> +skb_priority(0),skb_mark(0/0),in_port(100),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions:101,3,2
>> +skb_priority(0),skb_mark(0/0),in_port(101),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions:100,2,3
>> ])
>>
>> AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(100).*packets:9' |
>> FILTER_FLOW_DUMP], [0], [dnl
>>
>> -skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(100),eth(src=50:54:00:00:00:05/00:00:00:00:00:00,dst=50:54:00:00:00:07/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.1/0.0.0.0,dst=192.168.0.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> packets:9, bytes:540, used:0.0s, actions:101,3,2
>> +skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(100),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> packets:9, bytes:540, used:0.0s, actions:101,3,2
>> ])
>> AT_CHECK([cat ovs-vswitchd.log | grep -e 'in_port(101).*packets:4' |
>> FILTER_FLOW_DUMP], [0], [dnl
>>
>> -skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(101),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 192.168.0.2/0.0.0.0,dst=192.168.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> packets:4, bytes:240, used:0.0s, actions:100,2,3
>> +skb_priority(0),skb_mark(0/0),recirc_id(0),in_port(101),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> packets:4, bytes:240, used:0.0s, actions:100,2,3
>> ])
>>
>> AT_CHECK([ovs-ofctl dump-ports br0 pbr0], [0], [dnl
>> @@ -3886,7 +3886,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -3903,8 +3903,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -3922,8 +3922,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.252,frag=no),icmp(), actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(src=10.0.0.4,proto=1,frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -3941,8 +3941,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1,dst=2001:db8:3c4d:1:2:3:4:1,label=0,proto=99,tclass=0x70,hlimit=64,frag=no)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:07/00:00:00:00:00:00,dst=50:54:00:00:00:05/00:00:00:00:00:00),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,dst=fe80::2/::,label=0/0,proto=10/0,tclass=0x70/0,hlimit=128/0,frag=no/0xff),
>> actions: <del>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,dst=2001:db8:3c4d:1:2:3:4:1/::,label=0/0,proto=99/0,tclass=0x70/0,hlimit=64/0,frag=no/0xff),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:1:2:3:4:5,frag=no),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x86dd),ipv6(src=2001:db8:3c4d:5:4:3:2:1/ffff:ffff:ffff:fffc::,frag=no),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -3958,7 +3958,7 @@ AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0xff,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(proto=1,frag=no),icmp(type=8),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -3972,8 +3972,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -3991,8 +3991,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1),
>> actions: <del>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b),eth_type(0x8847),mpls(label=11,tc=3,ttl=64,bos=1),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4021,8 +4021,8 @@ m4_define([CHECK_MEGAFLOW_NETFLOW],
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT],
>> [0], [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/255.255.255.255,proto=1/0xff,tos=0/0xfc,ttl=64/0,frag=no/0xff),icmp(type=8,code=0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0/0xfc,frag=no),icmp(type=8,code=0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0/0xfc,frag=no),icmp(type=8,code=0),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP])
>> @@ -4045,8 +4045,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4066,8 +4066,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4104,8 +4104,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p7
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p7
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>>
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(7),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4123,8 +4123,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4143,8 +4143,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> 1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4162,8 +4162,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4185,7 +4185,7 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4207,8 +4207,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x8100),vlan(vid=11/0xfff,pcp=7/0x0,cfi=1/1),encap(eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0)),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x8100),vlan(vid=11,cfi=1),encap(eth_type(0x0800),ipv4(frag=no),icmp()),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4227,8 +4227,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(src=10.0.0.2,frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(src=10.0.0.4,frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4245,8 +4245,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.255,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/255.255.255.255,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(src=10.0.0.2,frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(src=10.0.0.4,frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4272,8 +4272,8 @@ done
>> sleep 1
>> dnl The original flow is missing due to a revalidation.
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/ff:ff:ff:ff:ff:ff,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4296,15 +4296,16 @@ in_port=3,actions=output(4)
>> AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>> dnl ECN bits are always copied out, but don't use 0x3 (CE), since that
>> dnl will cause the packet to be dropped.
>> +
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
>> AT_CHECK([ovs-appctl netdev-dummy/receive p3
>> 'in_port(3),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0xfd,ttl=128,frag=no),icmp(type=8,code=0)'])
>> AT_CHECK([ovs-appctl netdev-dummy/receive p3
>> 'in_port(3),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0x1,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0x3,ttl=128/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0xfd/0xff,ttl=128/0xff,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>>
>> -skb_priority(0),skb_mark(0/0),in_port(3),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0x1/0xff,ttl=64/0xff,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(tos=0xfd/0x3,frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(3),eth(),eth_type(0x0800),ipv4(tos=0x1,ttl=64,frag=no),icmp(),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(3),eth(),eth_type(0x0800),ipv4(tos=0xfd,ttl=128,frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4322,8 +4323,8 @@ AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:
>> AT_CHECK([ovs-appctl netdev-dummy/receive p1
>> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
>> sleep 1
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_XOUT], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.252,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions: <del>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b/00:00:00:00:00:00,dst=50:54:00:00:00:0c/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8/0,code=0/0),
>> actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/255.255.255.252,frag=no),icmp(), actions: <del>
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(),
>> actions: <del>
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -4350,8 +4351,8 @@ dnl MAC, so both the source and destination MAC
>> addresses are
>> dnl un-wildcarded, since the ODP commit functions update both the source
>> dnl and destination MAC addresses.
>> AT_CHECK([cat ovs-vswitchd.log | FILTER_FLOW_INSTALL | STRIP_USED], [0],
>> [dnl
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:09/00:00:00:00:00:00,dst=50:54:00:00:00:0a/ff:ff:ff:ff:ff:ff),eth_type(0x0800),ipv4(src=
>> 10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions:2
>>
>> -skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=
>> 10.0.0.4/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff),icmp(type=8/0,code=0/0),
>> actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions:2
>> +skb_priority(0),skb_mark(0/0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no),icmp(),
>> actions:set(eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0a)),2
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> diff --git a/tests/tunnel.at b/tests/tunnel.at
>> index aa16d58..695a624 100644
>> --- a/tests/tunnel.at
>> +++ b/tests/tunnel.at
>> @@ -24,13 +24,13 @@ AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0],
>> [dnl
>> dnl remote_ip
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=1.2.3.4,tos=0x0,ttl=64,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> - [Datapath actions:
>> set(tunnel(tun_id=0x0,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df))),1
>> + [Datapath actions:
>> set(tunnel(tun_id=0,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df))),1
>> ])
>>
>> dnl local_ip, remote_ip
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> - [Datapath actions:
>> set(tunnel(tun_id=0x0,src=2.2.2.2,dst=1.1.1.1,tos=0x0,ttl=64,flags(df))),1
>> + [Datapath actions:
>> set(tunnel(tun_id=0,src=2.2.2.2,dst=1.1.1.1,tos=0,ttl=64,flags(df))),1
>> ])
>>
>> dnl reconfigure, local_ip, remote_ip
>> @@ -45,15 +45,15 @@ AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0],
>> [dnl
>> ])
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> - [Datapath actions:
>> set(tunnel(tun_id=0x0,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df))),1
>> + [Datapath actions:
>> set(tunnel(tun_id=0,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df))),1
>> ])
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=2.2.2.3,tos=0x0,ttl=64,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> - [Datapath actions:
>> set(tunnel(tun_id=0x0,src=2.2.2.3,dst=1.1.1.1,tos=0x0,ttl=1,flags(csum))),1
>> + [Datapath actions:
>> set(tunnel(tun_id=0,src=2.2.2.3,dst=1.1.1.1,tos=0,ttl=1,flags(csum))),1
>> ])
>>
>> dnl nonexistent tunnel
>> -AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x0,src=5.5.5.5,dst=6.6.6.6,tos=0x0,ttl=64,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [2], [ignore], [dnl
>> +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0,src=5.5.5.5,dst=6.6.6.6,tos=0,ttl=64,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [2], [ignore], [dnl
>> Invalid datapath flow
>> ovs-appctl: ovs-vswitchd: server returned an error
>> ])
>> @@ -129,7 +129,7 @@ AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0],
>> [dnl
>> dnl Basic
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=4,ttl=128,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> - [Datapath actions:
>> set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1
>> + [Datapath actions:
>> set(tunnel(tun_id=0x5,src=2.2.2.2,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1
>> ])
>>
>> dnl ECN
>> @@ -161,19 +161,19 @@ AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0],
>> [dnl
>> dnl Basic
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=4,ttl=128,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> - [Datapath actions:
>> set(tunnel(tun_id=0x0,src=0.0.0.0,dst=1.1.1.1,tos=0x4,ttl=128,flags(df))),1
>> + [Datapath actions:
>> set(tunnel(tun_id=0,src=0.0.0.0,dst=1.1.1.1,tos=0x4,ttl=128,flags(df))),1
>> ])
>>
>> dnl ECN
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=5,ttl=128,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> - [Datapath actions:
>> set(tunnel(tun_id=0x0,src=0.0.0.0,dst=1.1.1.1,tos=0x5,ttl=128,flags(df))),1
>> + [Datapath actions:
>> set(tunnel(tun_id=0,src=0.0.0.0,dst=1.1.1.1,tos=0x5,ttl=128,flags(df))),1
>> ])
>>
>> dnl non-IP
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'in_port(2),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0806),arp(sip=1.2.3.4,tip=5.6.7.8,op=1,sha=00:0f:10:11:12:13,tha=00:14:15:16:17:18)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> - [Datapath actions:
>> set(tunnel(tun_id=0x0,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df))),1
>> + [Datapath actions:
>> set(tunnel(tun_id=0,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df))),1
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -204,10 +204,10 @@ AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0],
>> [dnl
>>
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'in_port(100),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0], [Datapath actions: dnl
>>
>> -set(tunnel(tun_id=0x1,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1,dnl
>>
>> -set(tunnel(tun_id=0x2,src=0.0.0.0,dst=2.2.2.2,tos=0x0,ttl=64,flags(df,key))),1,dnl
>>
>> -set(tunnel(tun_id=0x3,src=0.0.0.0,dst=3.3.3.3,tos=0x0,ttl=64,flags(df,key))),1,dnl
>>
>> -set(tunnel(tun_id=0x5,src=0.0.0.0,dst=4.4.4.4,tos=0x0,ttl=64,flags(df,key))),1
>>
>> +set(tunnel(tun_id=0x1,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1,dnl
>>
>> +set(tunnel(tun_id=0x2,src=0.0.0.0,dst=2.2.2.2,tos=0,ttl=64,flags(df,key))),1,dnl
>>
>> +set(tunnel(tun_id=0x3,src=0.0.0.0,dst=3.3.3.3,tos=0,ttl=64,flags(df,key))),1,dnl
>>
>> +set(tunnel(tun_id=0x5,src=0.0.0.0,dst=4.4.4.4,tos=0,ttl=64,flags(df,key))),1
>> ])
>> OVS_VSWITCHD_STOP
>> AT_CLEANUP
>> @@ -235,23 +235,23 @@ AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0],
>> [dnl
>>
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x1,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0], [Datapath actions: dnl
>>
>> -set(tunnel(tun_id=0x1,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1,dnl
>>
>> -set(tunnel(tun_id=0x3,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1,dnl
>>
>> -set(tunnel(tun_id=0x5,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1
>>
>> +set(tunnel(tun_id=0x1,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1,dnl
>>
>> +set(tunnel(tun_id=0x3,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1,dnl
>>
>> +set(tunnel(tun_id=0x5,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1
>> ])
>>
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x2,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0], [Datapath actions: dnl
>>
>> -set(tunnel(tun_id=0x3,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1,dnl
>>
>> -set(tunnel(tun_id=0x1,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1,dnl
>>
>> -set(tunnel(tun_id=0x5,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1
>>
>> +set(tunnel(tun_id=0x3,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1,dnl
>>
>> +set(tunnel(tun_id=0x1,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1,dnl
>>
>> +set(tunnel(tun_id=0x5,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1
>> ])
>>
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags()),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0], [Datapath actions: dnl
>>
>> -set(tunnel(tun_id=0x5,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1,dnl
>>
>> -set(tunnel(tun_id=0x1,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1,dnl
>>
>> -set(tunnel(tun_id=0x3,src=0.0.0.0,dst=1.1.1.1,tos=0x0,ttl=64,flags(df,key))),1
>>
>> +set(tunnel(tun_id=0x5,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1,dnl
>>
>> +set(tunnel(tun_id=0x1,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1,dnl
>>
>> +set(tunnel(tun_id=0x3,src=0.0.0.0,dst=1.1.1.1,tos=0,ttl=64,flags(df,key))),1
>> ])
>>
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0xf,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [2], [ignore], [dnl
>> @@ -287,22 +287,22 @@ AT_CHECK([ovs-appctl dpif/show | tail -n +3], [0],
>> [dnl
>> p5 5/5: (dummy)
>> ])
>>
>> -AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x2,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x2,src=1.1.1.1,dst=2.2.2.2,tos=0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0], [dnl
>> Datapath actions: 3
>> ])
>>
>> -AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x3,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x3,src=1.1.1.1,dst=2.2.2.2,tos=0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0], [dnl
>> -Datapath actions:
>> 4,3,set(tunnel(tun_id=0x3,src=0.0.0.0,dst=3.3.3.3,tos=0x0,ttl=64,flags(df,key))),1,5
>> +Datapath actions:
>> 4,3,set(tunnel(tun_id=0x3,src=0.0.0.0,dst=3.3.3.3,tos=0,ttl=64,flags(df,key))),1,5
>> ])
>>
>> -AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x3,src=3.3.3.3,dst=2.2.2.2,tos=0x0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x3,src=3.3.3.3,dst=2.2.2.2,tos=0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0], [dnl
>> Datapath actions: 4,3,5
>> ])
>>
>> -AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0x0,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'tunnel(tun_id=0,src=1.1.1.1,dst=2.2.2.2,tos=0,ttl=64,flags(key)),in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0], [dnl
>> Datapath actions: drop
>> ])
>> @@ -387,7 +387,7 @@ in_port=5 actions=set_field:5->tun_id
>> AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>> AT_CHECK([ovs-appctl ofproto/trace ovs-dummy
>> 'in_port(90),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=128,frag=no),icmp(type=8,code=0)'],
>> [0], [stdout])
>> AT_CHECK([tail -1 stdout], [0],
>> - [Datapath actions:
>> set(tunnel(tun_id=0x2a,src=0.0.0.0,dst=1.1.1.1,tos=0x0,tt
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
> ...
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20140618/7ed62aec/attachment-0005.html>
More information about the dev
mailing list