]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
lib: Introduce ppp protocols
authorWojciech Drewek <wojciech.drewek@intel.com>
Fri, 29 Jul 2022 08:50:34 +0000 (10:50 +0200)
committerDavid Ahern <dsahern@kernel.org>
Fri, 29 Jul 2022 17:22:42 +0000 (11:22 -0600)
PPP protocol field uses different values than ethertype. Introduce
utilities for translating PPP protocols from strings to values
and vice versa. Use generic API from utils in order to get
proto id and name.

Signed-off-by: Wojciech Drewek <wojciech.drewek@intel.com>
Acked-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
include/rt_names.h
lib/Makefile
lib/ppp_proto.c [new file with mode: 0644]

index 1835f3be2bed52aee8c19a5cbca5dc1da1d9e1b2..6358650db404f600c2cd802b5f6d68298a4bddca 100644 (file)
@@ -31,6 +31,9 @@ int ll_addr_a2n(char *lladdr, int len, const char *arg);
 const char * ll_proto_n2a(unsigned short id, char *buf, int len);
 int ll_proto_a2n(unsigned short *id, const char *buf);
 
+const char *ppp_proto_n2a(unsigned short id, char *buf, int len);
+int ppp_proto_a2n(unsigned short *id, const char *buf);
+
 const char *nl_proto_n2a(int id, char *buf, int len);
 int nl_proto_a2n(__u32 *id, const char *arg);
 
index 6c98f9a61fdbdd6366924fa84b412df066fb3441..ddedd37feb3293deec2705e55ab9d005c1ecb7f0 100644 (file)
@@ -5,7 +5,7 @@ CFLAGS += -fPIC
 
 UTILOBJ = utils.o utils_math.o rt_names.o ll_map.o ll_types.o ll_proto.o ll_addr.o \
        inet_proto.o namespace.o json_writer.o json_print.o json_print_math.o \
-       names.o color.o bpf_legacy.o bpf_glue.o exec.o fs.o cg_map.o
+       names.o color.o bpf_legacy.o bpf_glue.o exec.o fs.o cg_map.o ppp_proto.o
 
 ifeq ($(HAVE_ELF),y)
 ifeq ($(HAVE_LIBBPF),y)
diff --git a/lib/ppp_proto.c b/lib/ppp_proto.c
new file mode 100644 (file)
index 0000000..a634664
--- /dev/null
@@ -0,0 +1,52 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Utilities for translating PPP protocols from strings
+ * and vice versa.
+ *
+ * Authors:     Wojciech Drewek <wojciech.drewek@intel.com>
+ */
+
+#include <linux/ppp_defs.h>
+#include <linux/if_ether.h>
+#include "utils.h"
+#include "rt_names.h"
+
+static const struct proto ppp_proto_names[] = {
+       {PPP_IP, "ip"},
+       {PPP_AT, "at"},
+       {PPP_IPX, "ipx"},
+       {PPP_VJC_COMP, "vjc_comp"},
+       {PPP_VJC_UNCOMP, "vjc_uncomp"},
+       {PPP_MP, "mp"},
+       {PPP_IPV6, "ipv6"},
+       {PPP_COMPFRAG, "compfrag"},
+       {PPP_COMP, "comp"},
+       {PPP_MPLS_UC, "mpls_uc"},
+       {PPP_MPLS_MC, "mpls_mc"},
+       {PPP_IPCP, "ipcp"},
+       {PPP_ATCP, "atcp"},
+       {PPP_IPXCP, "ipxcp"},
+       {PPP_IPV6CP, "ipv6cp"},
+       {PPP_CCPFRAG, "ccpfrag"},
+       {PPP_CCP, "ccp"},
+       {PPP_MPLSCP, "mplscp"},
+       {PPP_LCP, "lcp"},
+       {PPP_PAP, "pap"},
+       {PPP_LQR, "lqr"},
+       {PPP_CHAP, "chap"},
+       {PPP_CBCP, "cbcp"},
+};
+
+const char *ppp_proto_n2a(unsigned short id, char *buf, int len)
+{
+       size_t len_tb = ARRAY_SIZE(ppp_proto_names);
+
+       return proto_n2a(id, buf, len, ppp_proto_names, len_tb);
+}
+
+int ppp_proto_a2n(unsigned short *id, const char *buf)
+{
+       size_t len_tb = ARRAY_SIZE(ppp_proto_names);
+
+       return proto_a2n(id, buf, ppp_proto_names, len_tb);
+}