From 1f8c0dbe17acecf3e9d21950fc61bb0b621fb4fe Mon Sep 17 00:00:00 2001 From: liangbotong Date: Thu, 8 Dec 2022 00:25:08 -0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=80=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=85=8D=E7=BD=AEnewip=E5=9C=B0=E5=9D=80=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=88=97=E8=A1=A8=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?api=E6=8E=A5=E5=8F=A3(SIOCGIFCONF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liangbotong --- src/linux/include/net/if_ninet.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/linux/include/net/if_ninet.h b/src/linux/include/net/if_ninet.h index 4e88763..8172f73 100644 --- a/src/linux/include/net/if_ninet.h +++ b/src/linux/include/net/if_ninet.h @@ -61,4 +61,6 @@ struct ninet_dev { struct rcu_head rcu; }; +void devninet_init(void); + #endif -- Gitee From 172a0a60c373a12d313e7264eb9d9c10a5cac670 Mon Sep 17 00:00:00 2001 From: liangbotong Date: Thu, 8 Dec 2022 00:27:47 -0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=80=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=85=8D=E7=BD=AEnewip=E5=9C=B0=E5=9D=80=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=88=97=E8=A1=A8=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?api=E6=8E=A5=E5=8F=A3(SIOCGIFCONF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liangbotong --- src/linux/net/newip/Makefile | 2 +- src/linux/net/newip/af_ninet.c | 2 ++ src/linux/net/newip/devninet.c | 61 ++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/linux/net/newip/devninet.c diff --git a/src/linux/net/newip/Makefile b/src/linux/net/newip/Makefile index 12a3cbf..be2ee00 100644 --- a/src/linux/net/newip/Makefile +++ b/src/linux/net/newip/Makefile @@ -8,7 +8,7 @@ # net/newip/Makefile obj-$(CONFIG_NEWIP) += newip.o -newip-objs := nip_addr.o nip_hdr_encap.o nip_hdr_decap.o nip_checksum.o af_ninet.o nip_input.o udp.o protocol.o nip_output.o nip_addrconf.o nip_addrconf_core.o route.o nip_fib.o nip_fib_rules.o nndisc.o icmp.o tcp_nip_parameter.o +newip-objs := nip_addr.o nip_hdr_encap.o nip_hdr_decap.o nip_checksum.o af_ninet.o nip_input.o udp.o protocol.o nip_output.o nip_addrconf.o nip_addrconf_core.o route.o nip_fib.o nip_fib_rules.o nndisc.o icmp.o tcp_nip_parameter.o devninet.o newip-objs += tcp_nip.o ninet_connection_sock.o ninet_hashtables.o tcp_nip_output.o tcp_nip_input.o tcp_nip_timer.o nip_sockglue.o newip-objs += nip_hooks_register.o diff --git a/src/linux/net/newip/af_ninet.c b/src/linux/net/newip/af_ninet.c index 480e7c2..6526658 100644 --- a/src/linux/net/newip/af_ninet.c +++ b/src/linux/net/newip/af_ninet.c @@ -733,6 +733,8 @@ static int __init ninet_init(void) goto nip_packet_fail; } + devninet_init(); + #ifdef CONFIG_NEWIP_HOOKS err = ninet_hooks_register(); if (err) { diff --git a/src/linux/net/newip/devninet.c b/src/linux/net/newip/devninet.c new file mode 100644 index 0000000..78e72ee --- /dev/null +++ b/src/linux/net/newip/devninet.c @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * + * NewIP INET + * An implementation of the TCP/IP protocol suite for the LINUX + * operating system. NewIP INET is implemented using the BSD Socket + * interface as the means of communication with the user level. + * + * DEVICE - NEWIP device support. + * Based on net/ipv4/devinet.c + */ +#include +#include + +static int ninet_gifconf(struct net_device *dev, char __user *buf, int len, int size) +{ + struct ninet_dev *nin_dev = __nin_dev_get(dev); + const struct ninet_ifaddr *ifa; + struct ifreq ifr; + int done = 0; + + if (WARN_ON(size > sizeof(struct ifreq))) + goto out; + if (!nin_dev) + goto out; + + list_for_each_entry(ifa, &nin_dev->addr_list, if_list) { + ifa = rcu_dereference_protected(ifa, lockdep_is_held(&ifa->lock)); + if (!ifa) { + done = -EFAULT; + break; + } + if (!buf) { + done += size; + continue; + } + if (len < size) + break; + memset(&ifr, 0, sizeof(struct ifreq)); + strcpy(ifr.ifr_name, ifa->rt->dst.dev->name); + + (*(struct sockaddr_nin *)&ifr.ifr_addr).sin_family = AF_NINET; + memcpy(&((struct sockaddr_nin *)&ifr.ifr_addr)->sin_addr, &ifa->addr, + sizeof(struct nip_addr)); + + if (copy_to_user(buf + done, &ifr, size)) { + done = -EFAULT; + break; + } + len -= size; + done += size; + } +out: + return done; +} + +void __init devninet_init(void) +{ + register_gifconf(PF_NINET, ninet_gifconf); +} -- Gitee From 1766e25559914915b1fc019ca21c6b50ecacdeb8 Mon Sep 17 00:00:00 2001 From: liangbotong Date: Wed, 14 Dec 2022 11:44:04 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=80=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=85=8D=E7=BD=AEnewip=E5=9C=B0=E5=9D=80=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=88=97=E8=A1=A8=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?api=E6=8E=A5=E5=8F=A3(SIOCGIFCONF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liangbotong --- src/linux/net/newip/devninet.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/linux/net/newip/devninet.c b/src/linux/net/newip/devninet.c index 78e72ee..5363305 100644 --- a/src/linux/net/newip/devninet.c +++ b/src/linux/net/newip/devninet.c @@ -10,8 +10,11 @@ * DEVICE - NEWIP device support. * Based on net/ipv4/devinet.c */ +#include +#include #include #include +#include static int ninet_gifconf(struct net_device *dev, char __user *buf, int len, int size) { @@ -57,5 +60,10 @@ out: void __init devninet_init(void) { - register_gifconf(PF_NINET, ninet_gifconf); + int err; + + err = register_gifconf(PF_NINET, ninet_gifconf); + if (err < 0) + DEBUG("%s: ninet_gifconf register fail!\n", __func__); } + -- Gitee