Line continuations are useful for specifying big packets in hex form in tests. Allow the hex packet to include '\'s to specify continuations. Also line length is limited to 998 in patches because of SMTP limits. Creating patches with longer lines lines leads to corrupted patches.
Signed-off-by: Darrell Ball <[email protected]> --- lib/packets.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/packets.c b/lib/packets.c index 38bfb60..13186f9 100644 --- a/lib/packets.c +++ b/lib/packets.c @@ -490,21 +490,32 @@ eth_from_hex(const char *hex, struct dp_packet **packetp) { struct dp_packet *packet; + char *hex2 = xstrdup(hex); + /* Handle '\' in input to allow for long line continuations. */ + for (int i = 0; i < strlen(hex2); i++) { + if (hex2[i] == '\\') { + memmove(&hex2[i], &hex2[i + 1], strlen(hex2) - i); + } + } + /* Use 2 bytes of headroom to 32-bit align the L3 header. */ - packet = *packetp = dp_packet_new_with_headroom(strlen(hex) / 2, 2); + packet = *packetp = dp_packet_new_with_headroom(strlen(hex2) / 2, 2); - if (dp_packet_put_hex(packet, hex, NULL)[0] != '\0') { + if (dp_packet_put_hex(packet, hex2, NULL)[0] != '\0') { dp_packet_delete(packet); *packetp = NULL; + free(hex2); return "Trailing garbage in packet data"; } if (dp_packet_size(packet) < ETH_HEADER_LEN) { dp_packet_delete(packet); *packetp = NULL; + free(hex2); return "Packet data too short for Ethernet"; } + free(hex2); return NULL; } -- 1.9.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
