Hello, I took the odd hour to look into this, and in big-endian this is broken:
lib/packet.h: union flow_in_port { odp_port_t odp_port; ofp_port_t ofp_port; }; I would propose to change this to something like: #ifdef WORDS_BIGENDIAN #define LVALUE 1 #else #define LVALUE 0 #endif union flow_in_port { odp_port_t odp_port; ofp_port_t ofp_port[2]; }; and access ofp_port with ofp_port[LVALUE]. This makes the following work in all cases: (This was posted by Ben some time ago) lib/match.c: if (wc->masks.in_port.odp_port == UINT32_MAX) { ds_put_format(s, "in_port=%"PRIu32",", f->in_port.odp_port); } else if (wc->masks.in_port.ofp_port[LVALUE]) { ds_put_cstr(s, "in_port="); ofputil_format_port(f->in_port.ofp_port[LVALUE], s); ds_put_char(s, ','); } Unforunately this requires a larger number of changes in the other files, and I haven't been able to find a less invasive method, but I tested it and it works for little and big endian. Cheers! Dirk _______________________________________________ discuss mailing list discuss@openvswitch.org http://openvswitch.org/mailman/listinfo/discuss