- if (unformat (input, "tcp"))
- *proto = TRANSPORT_PROTO_TCP;
- else if (unformat (input, "TCP"))
- *proto = TRANSPORT_PROTO_TCP;
- else if (unformat (input, "udpc"))
- *proto = TRANSPORT_PROTO_UDPC;
- else if (unformat (input, "UDPC"))
- *proto = TRANSPORT_PROTO_UDPC;
- else if (unformat (input, "udp"))
- *proto = TRANSPORT_PROTO_UDP;
- else if (unformat (input, "UDP"))
- *proto = TRANSPORT_PROTO_UDP;
- else if (unformat (input, "sctp"))
- *proto = TRANSPORT_PROTO_SCTP;
- else if (unformat (input, "SCTP"))
- *proto = TRANSPORT_PROTO_SCTP;
- else if (unformat (input, "tls"))
- *proto = TRANSPORT_PROTO_TLS;
- else if (unformat (input, "TLS"))
- *proto = TRANSPORT_PROTO_TLS;
- else if (unformat (input, "quic"))
- *proto = TRANSPORT_PROTO_QUIC;
- else if (unformat (input, "QUIC"))
- *proto = TRANSPORT_PROTO_QUIC;
- else
- return 0;
- return 1;
+ transport_proto_vft_t *tp_vft;
+ u8 longest_match = 0, match;
+ char *str, *str_match = 0;
+ transport_proto_t tp;
+
+ for (tp = 0; tp < vec_len (tp_vfts); tp++)
+ {
+ tp_vft = &tp_vfts[tp];
+ str = tp_vft->transport_options.name;
+ if (!str)
+ continue;
+ if (unformat_transport_str_match (input, str))
+ {
+ match = strlen (str);
+ if (match > longest_match)
+ {
+ *proto = tp;
+ longest_match = match;
+ str_match = str;
+ }
+ }
+ }
+ if (longest_match)
+ {
+ (void) unformat (input, str_match);
+ return 1;
+ }
+
+ return 0;
+}
+
+u8 *
+format_transport_protos (u8 * s, va_list * args)
+{
+ transport_proto_vft_t *tp_vft;
+
+ vec_foreach (tp_vft, tp_vfts)
+ s = format (s, "%s\n", tp_vft->transport_options.name);
+
+ return s;