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 |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
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>
> -----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.
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.
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 --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; +}
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(-)