X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fflow.c;h=29714b1cea9c900e3ec766eda05c5212bbda2888;hb=816fd533f85923c03cf8d9d6450bd9a0845d5160;hp=fa7ae4f178327fa681b05c5e37832037f313e5fd;hpb=deedf7e78b249383d6f7b385f9d04e08e33d0e3f;p=openvswitch diff --git a/lib/flow.c b/lib/flow.c index fa7ae4f1..29714b1c 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -507,6 +507,19 @@ flow_zero_wildcards(struct flow *flow, const struct flow_wildcards *wildcards) flow->skb_priority = 0; } +/* Initializes 'fmd' with the metadata found in 'flow'. */ +void +flow_get_metadata(const struct flow *flow, struct flow_metadata *fmd) +{ + fmd->tun_id = flow->tun_id; + fmd->tun_id_mask = htonll(UINT64_MAX); + + memcpy(fmd->regs, flow->regs, sizeof fmd->regs); + memset(fmd->reg_masks, 0xff, sizeof fmd->reg_masks); + + fmd->in_port = flow->in_port; +} + char * flow_to_string(const struct flow *flow) { @@ -518,41 +531,41 @@ flow_to_string(const struct flow *flow) void flow_format(struct ds *ds, const struct flow *flow) { - ds_put_format(ds, "priority%"PRIu32 - ":tunnel%#"PRIx64 - ":in_port%04"PRIx16, + ds_put_format(ds, "priority:%"PRIu32 + ",tunnel:%#"PRIx64 + ",in_port:%04"PRIx16, flow->skb_priority, ntohll(flow->tun_id), flow->in_port); - ds_put_format(ds, ":tci("); + ds_put_format(ds, ",tci("); if (flow->vlan_tci) { - ds_put_format(ds, "vlan%"PRIu16",pcp%d", + ds_put_format(ds, "vlan:%"PRIu16",pcp:%d", vlan_tci_to_vid(flow->vlan_tci), vlan_tci_to_pcp(flow->vlan_tci)); } else { ds_put_char(ds, '0'); } - ds_put_format(ds, ") mac"ETH_ADDR_FMT"->"ETH_ADDR_FMT - " type%04"PRIx16, + ds_put_format(ds, ") mac("ETH_ADDR_FMT"->"ETH_ADDR_FMT + ") type:%04"PRIx16, ETH_ADDR_ARGS(flow->dl_src), ETH_ADDR_ARGS(flow->dl_dst), ntohs(flow->dl_type)); if (flow->dl_type == htons(ETH_TYPE_IPV6)) { - ds_put_format(ds, " label%#"PRIx32" proto%"PRIu8" tos%#"PRIx8 - " ttl%"PRIu8" ipv6", + ds_put_format(ds, " label:%#"PRIx32" proto:%"PRIu8" tos:%#"PRIx8 + " ttl:%"PRIu8" ipv6(", ntohl(flow->ipv6_label), flow->nw_proto, flow->nw_tos, flow->nw_ttl); print_ipv6_addr(ds, &flow->ipv6_src); ds_put_cstr(ds, "->"); print_ipv6_addr(ds, &flow->ipv6_dst); - + ds_put_char(ds, ')'); } else { - ds_put_format(ds, " proto%"PRIu8" tos%#"PRIx8" ttl%"PRIu8 - " ip"IP_FMT"->"IP_FMT, - flow->nw_proto, flow->nw_tos, flow->nw_ttl, - IP_ARGS(&flow->nw_src), IP_ARGS(&flow->nw_dst)); + ds_put_format(ds, " proto:%"PRIu8" tos:%#"PRIx8" ttl:%"PRIu8 + " ip("IP_FMT"->"IP_FMT")", + flow->nw_proto, flow->nw_tos, flow->nw_ttl, + IP_ARGS(&flow->nw_src), IP_ARGS(&flow->nw_dst)); } if (flow->nw_frag) { ds_put_format(ds, " frag(%s)", @@ -561,11 +574,11 @@ flow_format(struct ds *ds, const struct flow *flow) ? "later" : ""); } if (flow->tp_src || flow->tp_dst) { - ds_put_format(ds, " port%"PRIu16"->%"PRIu16, + ds_put_format(ds, " port(%"PRIu16"->%"PRIu16")", ntohs(flow->tp_src), ntohs(flow->tp_dst)); } if (!eth_addr_is_zero(flow->arp_sha) || !eth_addr_is_zero(flow->arp_tha)) { - ds_put_format(ds, " arp_ha"ETH_ADDR_FMT"->"ETH_ADDR_FMT, + ds_put_format(ds, " arp_ha("ETH_ADDR_FMT"->"ETH_ADDR_FMT")", ETH_ADDR_ARGS(flow->arp_sha), ETH_ADDR_ARGS(flow->arp_tha)); } @@ -995,7 +1008,7 @@ flow_compose(struct ofpbuf *b, const struct flow *flow) } if (flow->vlan_tci & htons(VLAN_CFI)) { - eth_push_vlan(b, flow->vlan_tci & ~htons(VLAN_CFI)); + eth_push_vlan(b, flow->vlan_tci); } if (flow->dl_type == htons(ETH_TYPE_IP)) {