diff mbox series

[iproute-next,v4,1/3] lib: refactor ll_proto functions

Message ID 20220729085035.535788-2-wojciech.drewek@intel.com (mailing list archive)
State Changes Requested
Delegated to: David Ahern
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 29, 2022, 8:50 a.m. UTC
Move core logic of ll_proto_n2a and ll_proto_a2n
to utils.c and make it more generic by allowing to
pass table of protocols as argument (proto_tb).
Introduce struct proto with protocol ID and name to
allow this. This wil allow to use those functions by
other use cases.

Signed-off-by: Wojciech Drewek <wojciech.drewek@intel.com>
---
 include/utils.h | 10 ++++++++++
 lib/ll_proto.c  | 33 ++++++++-------------------------
 lib/utils.c     | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 52 insertions(+), 25 deletions(-)

Comments

Guillaume Nault July 29, 2022, 1:22 p.m. UTC | #1
On Fri, Jul 29, 2022 at 10:50:33AM +0200, Wojciech Drewek wrote:
> Move core logic of ll_proto_n2a and ll_proto_a2n
> to utils.c and make it more generic by allowing to
> pass table of protocols as argument (proto_tb).
> Introduce struct proto with protocol ID and name to
> allow this. This wil allow to use those functions by
> other use cases.

Acked-by: Guillaume Nault <gnault@redhat.com>
Wojciech Drewek July 29, 2022, 2:32 p.m. UTC | #2
> -----Original Message-----
> From: Guillaume Nault <gnault@redhat.com>
> Sent: piątek, 29 lipca 2022 15:22
> To: Drewek, Wojciech <wojciech.drewek@intel.com>
> Cc: netdev@vger.kernel.org; dsahern@gmail.com; stephen@networkplumber.org
> Subject: Re: [PATCH iproute-next v4 1/3] lib: refactor ll_proto functions
> 
> On Fri, Jul 29, 2022 at 10:50:33AM +0200, Wojciech Drewek wrote:
> > Move core logic of ll_proto_n2a and ll_proto_a2n
> > to utils.c and make it more generic by allowing to
> > pass table of protocols as argument (proto_tb).
> > Introduce struct proto with protocol ID and name to
> > allow this. This wil allow to use those functions by
> > other use cases.
> 
> Acked-by: Guillaume Nault <gnault@redhat.com>

Sorry, I forgot to add your Acked-by, if next version will be needed I'll add it.
David Ahern July 29, 2022, 2:56 p.m. UTC | #3
On 7/29/22 8:32 AM, Drewek, Wojciech wrote:
> Sorry, I forgot to add your Acked-by, if next version will be needed I'll add it.

please keep the ack's on the next version.
Guillaume Nault July 29, 2022, 4:04 p.m. UTC | #4
On Fri, Jul 29, 2022 at 02:32:36PM +0000, Drewek, Wojciech wrote:
> 
> 
> > -----Original Message-----
> > From: Guillaume Nault <gnault@redhat.com>
> > Sent: piątek, 29 lipca 2022 15:22
> > To: Drewek, Wojciech <wojciech.drewek@intel.com>
> > Cc: netdev@vger.kernel.org; dsahern@gmail.com; stephen@networkplumber.org
> > Subject: Re: [PATCH iproute-next v4 1/3] lib: refactor ll_proto functions
> > 
> > On Fri, Jul 29, 2022 at 10:50:33AM +0200, Wojciech Drewek wrote:
> > > Move core logic of ll_proto_n2a and ll_proto_a2n
> > > to utils.c and make it more generic by allowing to
> > > pass table of protocols as argument (proto_tb).
> > > Introduce struct proto with protocol ID and name to
> > > allow this. This wil allow to use those functions by
> > > other use cases.
> > 
> > Acked-by: Guillaume Nault <gnault@redhat.com>
> 
> Sorry, I forgot to add your Acked-by, if next version will be needed I'll add it.

No worry :)
diff mbox series

Patch

diff --git a/include/utils.h b/include/utils.h
index 9765fdd231df..eeb23a64f008 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -369,4 +369,14 @@  void inc_indent(struct indent_mem *mem);
 void dec_indent(struct indent_mem *mem);
 void print_indent(struct indent_mem *mem);
 
+struct proto {
+	int id;
+	const char *name;
+};
+
+int proto_a2n(unsigned short *id, const char *buf,
+	      const struct proto *proto_tb, size_t tb_len);
+const char *proto_n2a(unsigned short id, char *buf, int len,
+		      const struct proto *proto_tb, size_t tb_len);
+
 #endif /* __UTILS_H__ */
diff --git a/lib/ll_proto.c b/lib/ll_proto.c
index 342ea2eefa4c..925e2caa05e5 100644
--- a/lib/ll_proto.c
+++ b/lib/ll_proto.c
@@ -28,10 +28,8 @@ 
 
 
 #define __PF(f,n) { ETH_P_##f, #n },
-static const struct {
-	int id;
-	const char *name;
-} llproto_names[] = {
+
+static const struct proto llproto_names[] = {
 __PF(LOOP,loop)
 __PF(PUP,pup)
 __PF(PUPAT,pupat)
@@ -90,31 +88,16 @@  __PF(TEB,teb)
 };
 #undef __PF
 
-
-const char * ll_proto_n2a(unsigned short id, char *buf, int len)
+const char *ll_proto_n2a(unsigned short id, char *buf, int len)
 {
-        int i;
+	size_t len_tb = ARRAY_SIZE(llproto_names);
 
-	id = ntohs(id);
-
-        for (i=0; !numeric && i<sizeof(llproto_names)/sizeof(llproto_names[0]); i++) {
-                 if (llproto_names[i].id == id)
-			return llproto_names[i].name;
-	}
-        snprintf(buf, len, "[%d]", id);
-        return buf;
+	return proto_n2a(id, buf, len, llproto_names, len_tb);
 }
 
 int ll_proto_a2n(unsigned short *id, const char *buf)
 {
-        int i;
-        for (i=0; i < sizeof(llproto_names)/sizeof(llproto_names[0]); i++) {
-                 if (strcasecmp(llproto_names[i].name, buf) == 0) {
-			 *id = htons(llproto_names[i].id);
-			 return 0;
-		 }
-	}
-	if (get_be16(id, buf, 0))
-		return -1;
-	return 0;
+	size_t len_tb = ARRAY_SIZE(llproto_names);
+
+	return proto_a2n(id, buf, llproto_names, len_tb);
 }
diff --git a/lib/utils.c b/lib/utils.c
index 53d310060284..dd3cdb31239c 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -1925,3 +1925,37 @@  void print_indent(struct indent_mem *mem)
 	if (mem->indent_level)
 		printf("%s", mem->indent_str);
 }
+
+const char *proto_n2a(unsigned short id, char *buf, int len,
+		      const struct proto *proto_tb, size_t tb_len)
+{
+	int i;
+
+	id = ntohs(id);
+
+	for (i = 0; !numeric && i < tb_len; i++) {
+		if (proto_tb[i].id == id)
+			return proto_tb[i].name;
+	}
+
+	snprintf(buf, len, "[%d]", id);
+
+	return buf;
+}
+
+int proto_a2n(unsigned short *id, const char *buf,
+	      const struct proto *proto_tb, size_t tb_len)
+{
+	int i;
+
+	for (i = 0; i < tb_len; i++) {
+		if (strcasecmp(proto_tb[i].name, buf) == 0) {
+			*id = htons(proto_tb[i].id);
+			return 0;
+		}
+	}
+	if (get_be16(id, buf, 0))
+		return -1;
+
+	return 0;
+}