diff mbox series

[iproute-next,v3,2/3] lib: Introduce ppp protocols

Message ID 20220728110117.492855-3-wojciech.drewek@intel.com (mailing list archive)
State Superseded
Headers show
Series PPPoE support in tc-flower | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch

Commit Message

Wojciech Drewek July 28, 2022, 11:01 a.m. UTC
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>
---
 include/rt_names.h            |  3 ++
 include/uapi/linux/ppp_defs.h | 37 +++++++++++++++++++++++++
 lib/Makefile                  |  2 +-
 lib/ppp_proto.c               | 52 +++++++++++++++++++++++++++++++++++
 4 files changed, 93 insertions(+), 1 deletion(-)
 create mode 100644 include/uapi/linux/ppp_defs.h
 create mode 100644 lib/ppp_proto.c

Comments

Guillaume Nault July 28, 2022, 11:17 a.m. UTC | #1
On Thu, Jul 28, 2022 at 01:01:16PM +0200, Wojciech Drewek wrote:
> 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.

Acked-by: Guillaume Nault <gnault@redhat.com>
David Ahern July 28, 2022, 10:22 p.m. UTC | #2
On 7/28/22 5:01 AM, Wojciech Drewek wrote:
> diff --git a/include/uapi/linux/ppp_defs.h b/include/uapi/linux/ppp_defs.h
> new file mode 100644
> index 000000000000..0013dc77e3b9
> --- /dev/null
> +++ b/include/uapi/linux/ppp_defs.h
> @@ -0,0 +1,37 @@
> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
> +/*
> + * ppp_defs.h - PPP definitions.
> + *
> + * Copyright 1994-2000 Paul Mackerras.
> + *
> + *  This program is free software; you can redistribute it and/or
> + *  modify it under the terms of the GNU General Public License
> + *  version 2 as published by the Free Software Foundation.
> + */
> +
> +/*
> + * Protocol field values.
> + */
> +#define PPP_IP		0x21	/* Internet Protocol */
> +#define PPP_AT		0x29	/* AppleTalk Protocol */
> +#define PPP_IPX		0x2b	/* IPX protocol */
> +#define	PPP_VJC_COMP	0x2d	/* VJ compressed TCP */
> +#define	PPP_VJC_UNCOMP	0x2f	/* VJ uncompressed TCP */
> +#define PPP_MP		0x3d	/* Multilink protocol */
> +#define PPP_IPV6	0x57	/* Internet Protocol Version 6 */
> +#define PPP_COMPFRAG	0xfb	/* fragment compressed below bundle */
> +#define PPP_COMP	0xfd	/* compressed packet */
> +#define PPP_MPLS_UC	0x0281	/* Multi Protocol Label Switching - Unicast */
> +#define PPP_MPLS_MC	0x0283	/* Multi Protocol Label Switching - Multicast */
> +#define PPP_IPCP	0x8021	/* IP Control Protocol */
> +#define PPP_ATCP	0x8029	/* AppleTalk Control Protocol */
> +#define PPP_IPXCP	0x802b	/* IPX Control Protocol */
> +#define PPP_IPV6CP	0x8057	/* IPv6 Control Protocol */
> +#define PPP_CCPFRAG	0x80fb	/* CCP at link level (below MP bundle) */
> +#define PPP_CCP		0x80fd	/* Compression Control Protocol */
> +#define PPP_MPLSCP	0x80fd	/* MPLS Control Protocol */
> +#define PPP_LCP		0xc021	/* Link Control Protocol */
> +#define PPP_PAP		0xc023	/* Password Authentication Protocol */
> +#define PPP_LQR		0xc025	/* Link Quality Report protocol */
> +#define PPP_CHAP	0xc223	/* Cryptographic Handshake Auth. Protocol */
> +#define PPP_CBCP	0xc029	/* Callback Control Protocol */

uapi files are perioodically synced from kernel releases. This is a new
one, so I pulled in the file from the point of last headers sync. The
API file from that sync causes compile errors. Please rebase to top of
iproute2-next tree.
Wojciech Drewek July 29, 2022, 8:59 a.m. UTC | #3
> -----Original Message-----
> From: David Ahern <dsahern@gmail.com>
> Sent: piątek, 29 lipca 2022 00:23
> To: Drewek, Wojciech <wojciech.drewek@intel.com>; netdev@vger.kernel.org
> Cc: stephen@networkplumber.org; gnault@redhat.com
> Subject: Re: [PATCH iproute-next v3 2/3] lib: Introduce ppp protocols
> 
> On 7/28/22 5:01 AM, Wojciech Drewek wrote:
> > diff --git a/include/uapi/linux/ppp_defs.h b/include/uapi/linux/ppp_defs.h
> > new file mode 100644
> > index 000000000000..0013dc77e3b9
> > --- /dev/null
> > +++ b/include/uapi/linux/ppp_defs.h
> > @@ -0,0 +1,37 @@
> > +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
> > +/*
> > + * ppp_defs.h - PPP definitions.
> > + *
> > + * Copyright 1994-2000 Paul Mackerras.
> > + *
> > + *  This program is free software; you can redistribute it and/or
> > + *  modify it under the terms of the GNU General Public License
> > + *  version 2 as published by the Free Software Foundation.
> > + */
> > +
> > +/*
> > + * Protocol field values.
> > + */
> > +#define PPP_IP		0x21	/* Internet Protocol */
> > +#define PPP_AT		0x29	/* AppleTalk Protocol */
> > +#define PPP_IPX		0x2b	/* IPX protocol */
> > +#define	PPP_VJC_COMP	0x2d	/* VJ compressed TCP */
> > +#define	PPP_VJC_UNCOMP	0x2f	/* VJ uncompressed TCP */
> > +#define PPP_MP		0x3d	/* Multilink protocol */
> > +#define PPP_IPV6	0x57	/* Internet Protocol Version 6 */
> > +#define PPP_COMPFRAG	0xfb	/* fragment compressed below bundle */
> > +#define PPP_COMP	0xfd	/* compressed packet */
> > +#define PPP_MPLS_UC	0x0281	/* Multi Protocol Label Switching - Unicast */
> > +#define PPP_MPLS_MC	0x0283	/* Multi Protocol Label Switching - Multicast */
> > +#define PPP_IPCP	0x8021	/* IP Control Protocol */
> > +#define PPP_ATCP	0x8029	/* AppleTalk Control Protocol */
> > +#define PPP_IPXCP	0x802b	/* IPX Control Protocol */
> > +#define PPP_IPV6CP	0x8057	/* IPv6 Control Protocol */
> > +#define PPP_CCPFRAG	0x80fb	/* CCP at link level (below MP bundle) */
> > +#define PPP_CCP		0x80fd	/* Compression Control Protocol */
> > +#define PPP_MPLSCP	0x80fd	/* MPLS Control Protocol */
> > +#define PPP_LCP		0xc021	/* Link Control Protocol */
> > +#define PPP_PAP		0xc023	/* Password Authentication Protocol */
> > +#define PPP_LQR		0xc025	/* Link Quality Report protocol */
> > +#define PPP_CHAP	0xc223	/* Cryptographic Handshake Auth. Protocol */
> > +#define PPP_CBCP	0xc029	/* Callback Control Protocol */
> 
> uapi files are perioodically synced from kernel releases. This is a new
> one, so I pulled in the file from the point of last headers sync. The
> API file from that sync causes compile errors. Please rebase to top of
> iproute2-next tree.

Done
What is the standard procedure in such situation?
Should I create separate commit with uapi update, should
I not include uapi changes and ask you to update it?
David Ahern July 29, 2022, 3 p.m. UTC | #4
On 7/29/22 2:59 AM, Drewek, Wojciech wrote:
> What is the standard procedure in such situation?
> Should I create separate commit with uapi update, should
> I not include uapi changes and ask you to update it?

I always pull uapi files from a kernel header sync point. If a patch or
set contains a uapi update, it is removed before applying.

If uapi changes are included in a set, a separate patch file is best. I
can ignore it and apply the rest without modifying patch files.
diff mbox series

Patch

diff --git a/include/rt_names.h b/include/rt_names.h
index 1835f3be2bed..6358650db404 100644
--- a/include/rt_names.h
+++ b/include/rt_names.h
@@ -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);
 
diff --git a/include/uapi/linux/ppp_defs.h b/include/uapi/linux/ppp_defs.h
new file mode 100644
index 000000000000..0013dc77e3b9
--- /dev/null
+++ b/include/uapi/linux/ppp_defs.h
@@ -0,0 +1,37 @@ 
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * ppp_defs.h - PPP definitions.
+ *
+ * Copyright 1994-2000 Paul Mackerras.
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  version 2 as published by the Free Software Foundation.
+ */
+
+/*
+ * Protocol field values.
+ */
+#define PPP_IP		0x21	/* Internet Protocol */
+#define PPP_AT		0x29	/* AppleTalk Protocol */
+#define PPP_IPX		0x2b	/* IPX protocol */
+#define	PPP_VJC_COMP	0x2d	/* VJ compressed TCP */
+#define	PPP_VJC_UNCOMP	0x2f	/* VJ uncompressed TCP */
+#define PPP_MP		0x3d	/* Multilink protocol */
+#define PPP_IPV6	0x57	/* Internet Protocol Version 6 */
+#define PPP_COMPFRAG	0xfb	/* fragment compressed below bundle */
+#define PPP_COMP	0xfd	/* compressed packet */
+#define PPP_MPLS_UC	0x0281	/* Multi Protocol Label Switching - Unicast */
+#define PPP_MPLS_MC	0x0283	/* Multi Protocol Label Switching - Multicast */
+#define PPP_IPCP	0x8021	/* IP Control Protocol */
+#define PPP_ATCP	0x8029	/* AppleTalk Control Protocol */
+#define PPP_IPXCP	0x802b	/* IPX Control Protocol */
+#define PPP_IPV6CP	0x8057	/* IPv6 Control Protocol */
+#define PPP_CCPFRAG	0x80fb	/* CCP at link level (below MP bundle) */
+#define PPP_CCP		0x80fd	/* Compression Control Protocol */
+#define PPP_MPLSCP	0x80fd	/* MPLS Control Protocol */
+#define PPP_LCP		0xc021	/* Link Control Protocol */
+#define PPP_PAP		0xc023	/* Password Authentication Protocol */
+#define PPP_LQR		0xc025	/* Link Quality Report protocol */
+#define PPP_CHAP	0xc223	/* Cryptographic Handshake Auth. Protocol */
+#define PPP_CBCP	0xc029	/* Callback Control Protocol */
diff --git a/lib/Makefile b/lib/Makefile
index 6c98f9a61fdb..ddedd37feb32 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -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
index 000000000000..a63466432888
--- /dev/null
+++ b/lib/ppp_proto.c
@@ -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);
+}