lib: Introduce ppp protocols

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>
This commit is contained in:
Wojciech Drewek 2022-07-29 10:50:34 +02:00 committed by David Ahern
parent 653c7517fd
commit 5a56804ce1
3 changed files with 56 additions and 1 deletions

View 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);

View 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)

52
lib/ppp_proto.c Normal file
View File

@ -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);
}