103 lines
2.6 KiB
Diff
103 lines
2.6 KiB
Diff
From be875657f0fcaa2f87658a07c9de9fefb7f74f29 Mon Sep 17 00:00:00 2001
|
|
From: liubo <liubo335@huawei.com>
|
|
Date: Mon, 13 Mar 2023 19:58:35 +0800
|
|
Subject: [PATCH] add test case and enable in rpmbuild
|
|
|
|
---
|
|
utils/Makefile.in | 2 ++
|
|
utils/iftest.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++-
|
|
2 files changed, 50 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/utils/Makefile.in b/utils/Makefile.in
|
|
index d0c62f6..5bd6d2a 100644
|
|
--- a/utils/Makefile.in
|
|
+++ b/utils/Makefile.in
|
|
@@ -402,8 +402,10 @@ distdir: $(DISTFILES)
|
|
|| exit 1; \
|
|
fi; \
|
|
done
|
|
+ETHNAME=$(shell cat /proc/net/dev | awk '/[0-9]+/{print $$1,$$2}'| sed 's/://' | sort -k2rn | head -n1 | awk '{print $$1}' )
|
|
check-am: all-am
|
|
$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
|
|
+ ./iftest $(ETHNAME)
|
|
check: check-am
|
|
all-am: Makefile
|
|
installdirs:
|
|
diff --git a/utils/iftest.c b/utils/iftest.c
|
|
index 02f5807..b0cf819 100644
|
|
--- a/utils/iftest.c
|
|
+++ b/utils/iftest.c
|
|
@@ -5,15 +5,19 @@
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
#include <net/if.h>
|
|
+#include <linux/netfilter/nfnetlink.h>
|
|
|
|
+#include <libnfnetlink/linux_nfnetlink.h>
|
|
#include <libnfnetlink/libnfnetlink.h>
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int idx;
|
|
struct nlif_handle *h;
|
|
+ struct nfnl_handle *nf;
|
|
+ struct nfnl_subsys_handle *nsh;
|
|
char name[IFNAMSIZ];
|
|
- unsigned int flags;
|
|
+ unsigned int flags,bf;
|
|
|
|
if (argc != 2) {
|
|
fprintf(stderr, "Usage: %s <interface>\n", argv[0]);
|
|
@@ -48,5 +52,48 @@ int main(int argc, char *argv[])
|
|
flags & IFF_UP ? "UP" : "DOWN");
|
|
|
|
nlif_close(h);
|
|
+
|
|
+ nf = nfnl_open();
|
|
+
|
|
+ bf = nfnl_rcvbufsiz(nf,NFNL_BUFFSIZE/2);
|
|
+ if(bf != NFNL_BUFFSIZE){
|
|
+ printf("set the socket buffer size fail.\n");
|
|
+ }
|
|
+
|
|
+ nsh = nfnl_subsys_open(nf,NFNL_SUBSYS_CTNETLINK,5,0);
|
|
+
|
|
+ if(nfnl_callback_unregister(nsh,16)!=-1){
|
|
+ fprintf(stderr,"test ungister nfnl callback Anomalies failure\n");
|
|
+ }
|
|
+ if(nfnl_callback_unregister(nsh,0)==-1){
|
|
+ fprintf(stderr,"Cannot get unregister nfnl callback for device `%s'\n", argv[1]);
|
|
+ }
|
|
+
|
|
+ struct nfqnl_msg_config_params {
|
|
+ __be32 copy_range;
|
|
+ __u8 copy_mode;
|
|
+ } __attribute__ ((packed));
|
|
+
|
|
+ union {
|
|
+ char buf[NFNL_HEADER_LEN
|
|
+ +NFA_LENGTH(sizeof(struct nfqnl_msg_config_params))];
|
|
+ struct nlmsghdr nmh;
|
|
+ } u;
|
|
+ struct nfqnl_msg_config_params params;
|
|
+ nfnl_fill_hdr(nsh, &u.nmh, 0, 0, 0,
|
|
+ 0, NLM_F_REQUEST|NLM_F_ACK);
|
|
+
|
|
+ params.copy_range = 0xffff;
|
|
+ params.copy_mode = 2;
|
|
+ nfnl_addattr_l(&u.nmh, sizeof(u), 2, ¶ms,
|
|
+ sizeof(params));
|
|
+
|
|
+ if(nfnl_handle_packet(nf,(char *)&u.nmh, u.nmh.nlmsg_len)<0){
|
|
+ printf("nfnl handle packet function failure\n");
|
|
+ }
|
|
+
|
|
+ nfnl_subsys_close(nsh);
|
|
+ nfnl_close(nf);
|
|
+
|
|
return EXIT_SUCCESS;
|
|
}
|
|
--
|
|
2.33.0
|
|
|