11d68314aSopenharmony_cidiff -urN libnl-3.7.0/include/linux-private/linux/if_bridge.h libnl-3.7.0_new/include/linux-private/linux/if_bridge.h 21d68314aSopenharmony_ci--- libnl-3.7.0/include/linux-private/linux/if_bridge.h 2022-05-04 00:50:34.000000000 +0800 31d68314aSopenharmony_ci+++ libnl-3.7.0_new/include/linux-private/linux/if_bridge.h 2024-06-03 17:46:47.872030900 +0800 41d68314aSopenharmony_ci@@ -16,7 +16,7 @@ 51d68314aSopenharmony_ci 61d68314aSopenharmony_ci #include <linux/types.h> 71d68314aSopenharmony_ci #include <linux/if_ether.h> 81d68314aSopenharmony_ci-#include <linux/in6.h> 91d68314aSopenharmony_ci+#include <netinet/in.h> 101d68314aSopenharmony_ci 111d68314aSopenharmony_ci #define SYSFS_BRIDGE_ATTR "bridge" 121d68314aSopenharmony_ci #define SYSFS_BRIDGE_FDB "brforward" 131d68314aSopenharmony_cidiff -urN libnl-3.7.0/include/netlink-private/nl-auto.h libnl-3.7.0_new/include/netlink-private/nl-auto.h 141d68314aSopenharmony_ci--- libnl-3.7.0/include/netlink-private/nl-auto.h 2022-05-24 16:55:12.000000000 +0800 151d68314aSopenharmony_ci+++ libnl-3.7.0_new/include/netlink-private/nl-auto.h 2024-06-03 17:37:51.785691800 +0800 161d68314aSopenharmony_ci@@ -99,4 +99,11 @@ 171d68314aSopenharmony_ci #define _nl_auto_nl_socket _nl_auto(_nl_auto_nl_socket_fcn) 181d68314aSopenharmony_ci _NL_AUTO_DEFINE_FCN_TYPED0(struct nl_sock *, _nl_auto_nl_socket_fcn, nl_socket_free); 191d68314aSopenharmony_ci 201d68314aSopenharmony_ci+struct xfrmnl_user_tmpl; 211d68314aSopenharmony_ci+void xfrmnl_user_tmpl_free(struct xfrmnl_user_tmpl *utmpl); 221d68314aSopenharmony_ci+#define _nl_auto_xfrmnl_user_tmpl _nl_auto(_nl_auto_xfrmnl_user_tmpl_fcn) 231d68314aSopenharmony_ci+_NL_AUTO_DEFINE_FCN_TYPED0(struct xfrmnl_user_tmpl *, 241d68314aSopenharmony_ci+ _nl_auto_xfrmnl_user_tmpl_fcn, 251d68314aSopenharmony_ci+ xfrmnl_user_tmpl_free); 261d68314aSopenharmony_ci+ 271d68314aSopenharmony_ci #endif /* NETLINK_NL_AUTO_H_ */ 281d68314aSopenharmony_cidiff -urN libnl-3.7.0/include/netlink-private/utils.h libnl-3.7.0_new/include/netlink-private/utils.h 291d68314aSopenharmony_ci--- libnl-3.7.0/include/netlink-private/utils.h 2022-05-24 16:55:12.000000000 +0800 301d68314aSopenharmony_ci+++ libnl-3.7.0_new/include/netlink-private/utils.h 2024-06-03 17:36:49.655447000 +0800 311d68314aSopenharmony_ci@@ -361,8 +361,7 @@ 321d68314aSopenharmony_ci struct in6_addr a6; 331d68314aSopenharmony_ci } _NLIPAddr; 341d68314aSopenharmony_ci 351d68314aSopenharmony_ci-static inline char *_nl_inet_ntop(int addr_family, const void *addr, 361d68314aSopenharmony_ci- char buf[static INET_ADDRSTRLEN]) 371d68314aSopenharmony_ci+static inline char *_nl_inet_ntop(int addr_family, const void *addr, char *buf) 381d68314aSopenharmony_ci { 391d68314aSopenharmony_ci char *r; 401d68314aSopenharmony_ci 411d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/attr.c libnl-3.7.0_new/lib/attr.c 421d68314aSopenharmony_ci--- libnl-3.7.0/lib/attr.c 2022-07-06 23:01:59.000000000 +0800 431d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/attr.c 2024-06-03 17:39:30.549111300 +0800 441d68314aSopenharmony_ci@@ -349,10 +349,13 @@ 451d68314aSopenharmony_ci 461d68314aSopenharmony_ci if (!src) 471d68314aSopenharmony_ci return 0; 481d68314aSopenharmony_ci- 491d68314aSopenharmony_ci+ 501d68314aSopenharmony_ci minlen = min_t(int, count, nla_len(src)); 511d68314aSopenharmony_ci- memcpy(dest, nla_data(src), minlen); 521d68314aSopenharmony_ci 531d68314aSopenharmony_ci+ if (minlen <= 0) 541d68314aSopenharmony_ci+ return 0; 551d68314aSopenharmony_ci+ 561d68314aSopenharmony_ci+ memcpy(dest, nla_data(src), minlen); 571d68314aSopenharmony_ci return minlen; 581d68314aSopenharmony_ci } 591d68314aSopenharmony_ci 601d68314aSopenharmony_ci@@ -988,6 +991,15 @@ 611d68314aSopenharmony_ci { 621d68314aSopenharmony_ci ssize_t len; 631d68314aSopenharmony_ci 641d68314aSopenharmony_ci+ if (!attr) { 651d68314aSopenharmony_ci+ /* For robustness, allow a NULL attr to do nothing. NULL is also 661d68314aSopenharmony_ci+ * what nla_nest_start() when out of buffer space. 671d68314aSopenharmony_ci+ * 681d68314aSopenharmony_ci+ * Warning, before libnl-3.8, the function did not accept NULL! 691d68314aSopenharmony_ci+ * If you care, catch NULL yourself. */ 701d68314aSopenharmony_ci+ return; 711d68314aSopenharmony_ci+ } 721d68314aSopenharmony_ci+ 731d68314aSopenharmony_ci len = (char *) nlmsg_tail(msg->nm_nlh) - (char *) attr; 741d68314aSopenharmony_ci if (len < 0) 751d68314aSopenharmony_ci BUG(); 761d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/object.c libnl-3.7.0_new/lib/object.c 771d68314aSopenharmony_ci--- libnl-3.7.0/lib/object.c 2022-07-06 22:13:48.000000000 +0800 781d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/object.c 2024-06-03 17:41:15.060021200 +0800 791d68314aSopenharmony_ci@@ -392,7 +392,7 @@ 801d68314aSopenharmony_ci diff = nl_object_diff64(a, b); 811d68314aSopenharmony_ci 821d68314aSopenharmony_ci return (diff & ~((uint64_t) 0xFFFFFFFF)) 831d68314aSopenharmony_ci- ? (uint32_t) diff | (1 << 31) 841d68314aSopenharmony_ci+ ? (uint32_t) diff | (((uint32_t ) 1u) << 31) 851d68314aSopenharmony_ci : (uint32_t) diff; 861d68314aSopenharmony_ci } 871d68314aSopenharmony_ci 881d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/route/cls/flower.c libnl-3.7.0_new/lib/route/cls/flower.c 891d68314aSopenharmony_ci--- libnl-3.7.0/lib/route/cls/flower.c 2022-07-06 23:02:41.000000000 +0800 901d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/route/cls/flower.c 2024-06-03 18:28:20.501852400 +0800 911d68314aSopenharmony_ci@@ -787,6 +787,7 @@ 921d68314aSopenharmony_ci int rtnl_flower_append_action(struct rtnl_cls *cls, struct rtnl_act *act) 931d68314aSopenharmony_ci { 941d68314aSopenharmony_ci struct rtnl_flower *f; 951d68314aSopenharmony_ci+ int err; 961d68314aSopenharmony_ci 971d68314aSopenharmony_ci if (!act) 981d68314aSopenharmony_ci return 0; 991d68314aSopenharmony_ci@@ -796,8 +797,11 @@ 1001d68314aSopenharmony_ci 1011d68314aSopenharmony_ci f->cf_mask |= FLOWER_ATTR_ACTION; 1021d68314aSopenharmony_ci 1031d68314aSopenharmony_ci+ if ((err = rtnl_act_append(&f->cf_act, act)) < 0) 1041d68314aSopenharmony_ci+ return err; 1051d68314aSopenharmony_ci+ 1061d68314aSopenharmony_ci rtnl_act_get(act); 1071d68314aSopenharmony_ci- return rtnl_act_append(&f->cf_act, act); 1081d68314aSopenharmony_ci+ return 0; 1091d68314aSopenharmony_ci } 1101d68314aSopenharmony_ci 1111d68314aSopenharmony_ci /** 1121d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/route/link/bridge.c libnl-3.7.0_new/lib/route/link/bridge.c 1131d68314aSopenharmony_ci--- libnl-3.7.0/lib/route/link/bridge.c 2022-05-24 16:55:12.000000000 +0800 1141d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/route/link/bridge.c 2024-06-03 16:55:11.850716100 +0800 1151d68314aSopenharmony_ci@@ -189,6 +189,7 @@ 1161d68314aSopenharmony_ci if (nla_type(attr) == IFLA_BRIDGE_MODE) { 1171d68314aSopenharmony_ci bd->b_hwmode = nla_get_u16(attr); 1181d68314aSopenharmony_ci bd->ce_mask |= BRIDGE_ATTR_HWMODE; 1191d68314aSopenharmony_ci+ continue; 1201d68314aSopenharmony_ci } else if (nla_type(attr) != IFLA_BRIDGE_VLAN_INFO) 1211d68314aSopenharmony_ci continue; 1221d68314aSopenharmony_ci 1231d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/route/link.c libnl-3.7.0_new/lib/route/link.c 1241d68314aSopenharmony_ci--- libnl-3.7.0/lib/route/link.c 2022-05-24 16:55:12.000000000 +0800 1251d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/route/link.c 2024-06-03 17:44:18.163118300 +0800 1261d68314aSopenharmony_ci@@ -115,7 +115,7 @@ 1271d68314aSopenharmony_ci struct rtnl_link_af_ops *ops; 1281d68314aSopenharmony_ci 1291d68314aSopenharmony_ci ops = rtnl_link_af_ops_lookup(af_type); 1301d68314aSopenharmony_ci- if (ops && ops->ao_override_rtm(changes)) 1311d68314aSopenharmony_ci+ if (ops && ops->ao_override_rtm && ops->ao_override_rtm(changes)) 1321d68314aSopenharmony_ci return RTM_SETLINK; 1331d68314aSopenharmony_ci 1341d68314aSopenharmony_ci return RTM_NEWLINK; 1351d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/route/tc.c libnl-3.7.0_new/lib/route/tc.c 1361d68314aSopenharmony_ci--- libnl-3.7.0/lib/route/tc.c 2022-05-24 16:55:12.000000000 +0800 1371d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/route/tc.c 2024-06-03 17:36:24.831904500 +0800 1381d68314aSopenharmony_ci@@ -666,14 +666,14 @@ 1391d68314aSopenharmony_ci /** 1401d68314aSopenharmony_ci * Calculate the binary logarithm for a specific cell size 1411d68314aSopenharmony_ci * @arg cell_size Size of cell, must be a power of two. 1421d68314aSopenharmony_ci- * @return Binary logirhtm of cell size or a negative error code. 1431d68314aSopenharmony_ci+ * @return Binary logarithm of cell size or a negative error code. 1441d68314aSopenharmony_ci */ 1451d68314aSopenharmony_ci int rtnl_tc_calc_cell_log(int cell_size) 1461d68314aSopenharmony_ci { 1471d68314aSopenharmony_ci int i; 1481d68314aSopenharmony_ci 1491d68314aSopenharmony_ci for (i = 0; i < 32; i++) 1501d68314aSopenharmony_ci- if ((1 << i) == cell_size) 1511d68314aSopenharmony_ci+ if ((((uint32_t)1u) << i) == cell_size) 1521d68314aSopenharmony_ci return i; 1531d68314aSopenharmony_ci 1541d68314aSopenharmony_ci return -NLE_INVAL; 1551d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/socket.c libnl-3.7.0_new/lib/socket.c 1561d68314aSopenharmony_ci--- libnl-3.7.0/lib/socket.c 2022-05-24 16:55:12.000000000 +0800 1571d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/socket.c 2024-06-03 17:45:33.823477800 +0800 1581d68314aSopenharmony_ci@@ -54,6 +54,24 @@ 1591d68314aSopenharmony_ci } 1601d68314aSopenharmony_ci } 1611d68314aSopenharmony_ci 1621d68314aSopenharmony_ci+static uint32_t _badrandom_from_time(void) 1631d68314aSopenharmony_ci+{ 1641d68314aSopenharmony_ci+ uint32_t result; 1651d68314aSopenharmony_ci+ uint64_t v64; 1661d68314aSopenharmony_ci+ time_t t; 1671d68314aSopenharmony_ci+ 1681d68314aSopenharmony_ci+ t = time(NULL); 1691d68314aSopenharmony_ci+ v64 = (uint64_t)t; 1701d68314aSopenharmony_ci+ result = (uint32_t)v64; 1711d68314aSopenharmony_ci+ 1721d68314aSopenharmony_ci+ /* XOR with the upper bits. Otherwise, coverity warns about only 1731d68314aSopenharmony_ci+ * considering 32 bit from time_t. Use the inverse, so that for the 1741d68314aSopenharmony_ci+ * most part the bits don't change. */ 1751d68314aSopenharmony_ci+ result ^= (~(v64 >> 32)); 1761d68314aSopenharmony_ci+ 1771d68314aSopenharmony_ci+ return result; 1781d68314aSopenharmony_ci+} 1791d68314aSopenharmony_ci+ 1801d68314aSopenharmony_ci static uint32_t used_ports_map[32]; 1811d68314aSopenharmony_ci static NL_RW_LOCK(port_map_lock); 1821d68314aSopenharmony_ci 1831d68314aSopenharmony_ci@@ -67,7 +85,7 @@ 1841d68314aSopenharmony_ci nl_write_lock(&port_map_lock); 1851d68314aSopenharmony_ci 1861d68314aSopenharmony_ci if (idx_state == 0) { 1871d68314aSopenharmony_ci- uint32_t t = time(NULL); 1881d68314aSopenharmony_ci+ uint32_t t = _badrandom_from_time(); 1891d68314aSopenharmony_ci 1901d68314aSopenharmony_ci /* from time to time (on average each 2^15 calls), the idx_state will 1911d68314aSopenharmony_ci * be zero again. No problem, just "seed" anew with time(). */ 1921d68314aSopenharmony_ci@@ -184,7 +202,8 @@ 1931d68314aSopenharmony_ci sk->s_cb = nl_cb_get(cb); 1941d68314aSopenharmony_ci sk->s_local.nl_family = AF_NETLINK; 1951d68314aSopenharmony_ci sk->s_peer.nl_family = AF_NETLINK; 1961d68314aSopenharmony_ci- sk->s_seq_expect = sk->s_seq_next = time(NULL); 1971d68314aSopenharmony_ci+ sk->s_seq_next = _badrandom_from_time(); 1981d68314aSopenharmony_ci+ sk->s_seq_expect = sk->s_seq_next; 1991d68314aSopenharmony_ci 2001d68314aSopenharmony_ci /* the port is 0 (unspecified), meaning NL_OWN_PORT */ 2011d68314aSopenharmony_ci sk->s_flags = NL_OWN_PORT; 2021d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/utils.c libnl-3.7.0_new/lib/utils.c 2031d68314aSopenharmony_ci--- libnl-3.7.0/lib/utils.c 2022-07-06 23:21:11.000000000 +0800 2041d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/utils.c 2024-06-03 17:37:18.340704700 +0800 2051d68314aSopenharmony_ci@@ -880,7 +880,7 @@ 2061d68314aSopenharmony_ci return p->p_proto; 2071d68314aSopenharmony_ci 2081d68314aSopenharmony_ci l = strtoul(name, &end, 0); 2091d68314aSopenharmony_ci- if (l == ULONG_MAX || *end != '\0') 2101d68314aSopenharmony_ci+ if (name == end || *end != '\0' || l > (unsigned long)INT_MAX) 2111d68314aSopenharmony_ci return -NLE_OBJ_NOTFOUND; 2121d68314aSopenharmony_ci 2131d68314aSopenharmony_ci return (int) l; 2141d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/xfrm/ae.c libnl-3.7.0_new/lib/xfrm/ae.c 2151d68314aSopenharmony_ci--- libnl-3.7.0/lib/xfrm/ae.c 2022-05-24 16:55:12.000000000 +0800 2161d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/xfrm/ae.c 2024-06-03 17:42:21.017726700 +0800 2171d68314aSopenharmony_ci@@ -301,6 +301,7 @@ 2181d68314aSopenharmony_ci char flags[128], buf[128]; 2191d68314aSopenharmony_ci time_t add_time, use_time; 2201d68314aSopenharmony_ci struct tm *add_time_tm, *use_time_tm; 2211d68314aSopenharmony_ci+ struct tm tm_buf; 2221d68314aSopenharmony_ci 2231d68314aSopenharmony_ci nl_dump_line(p, "src %s dst %s \n", nl_addr2str(ae->saddr, src, sizeof(src)), 2241d68314aSopenharmony_ci nl_addr2str(ae->sa_id.daddr, dst, sizeof(dst))); 2251d68314aSopenharmony_ci@@ -320,7 +321,7 @@ 2261d68314aSopenharmony_ci if (ae->lifetime_cur.add_time != 0) 2271d68314aSopenharmony_ci { 2281d68314aSopenharmony_ci add_time = ae->lifetime_cur.add_time; 2291d68314aSopenharmony_ci- add_time_tm = gmtime (&add_time); 2301d68314aSopenharmony_ci+ add_time_tm = gmtime_r (&add_time, &tm_buf); 2311d68314aSopenharmony_ci strftime (flags, 128, "%Y-%m-%d %H-%M-%S", add_time_tm); 2321d68314aSopenharmony_ci } 2331d68314aSopenharmony_ci else 2341d68314aSopenharmony_ci@@ -331,7 +332,7 @@ 2351d68314aSopenharmony_ci if (ae->lifetime_cur.use_time != 0) 2361d68314aSopenharmony_ci { 2371d68314aSopenharmony_ci use_time = ae->lifetime_cur.use_time; 2381d68314aSopenharmony_ci- use_time_tm = gmtime (&use_time); 2391d68314aSopenharmony_ci+ use_time_tm = gmtime_r (&use_time, &tm_buf); 2401d68314aSopenharmony_ci strftime (buf, 128, "%Y-%m-%d %H-%M-%S", use_time_tm); 2411d68314aSopenharmony_ci } 2421d68314aSopenharmony_ci else 2431d68314aSopenharmony_ci@@ -505,11 +506,18 @@ 2441d68314aSopenharmony_ci if (err < 0) 2451d68314aSopenharmony_ci goto errout; 2461d68314aSopenharmony_ci 2471d68314aSopenharmony_ci- ae->sa_id.daddr = nl_addr_build(ae_id->sa_id.family, &ae_id->sa_id.daddr, sizeof (ae_id->sa_id.daddr)); 2481d68314aSopenharmony_ci+ if (!(ae->sa_id.daddr = nl_addr_build(ae_id->sa_id.family, &ae_id->sa_id.daddr, 2491d68314aSopenharmony_ci+ sizeof (ae_id->sa_id.daddr)))) { 2501d68314aSopenharmony_ci+ err = -NLE_NOMEM; 2511d68314aSopenharmony_ci+ goto errout; 2521d68314aSopenharmony_ci+ } 2531d68314aSopenharmony_ci ae->sa_id.family= ae_id->sa_id.family; 2541d68314aSopenharmony_ci ae->sa_id.spi = ntohl(ae_id->sa_id.spi); 2551d68314aSopenharmony_ci ae->sa_id.proto = ae_id->sa_id.proto; 2561d68314aSopenharmony_ci- ae->saddr = nl_addr_build(ae_id->sa_id.family, &ae_id->saddr, sizeof (ae_id->saddr)); 2571d68314aSopenharmony_ci+ if (!(ae->saddr = nl_addr_build(ae_id->sa_id.family, &ae_id->saddr, sizeof (ae_id->saddr)))) { 2581d68314aSopenharmony_ci+ err = -NLE_NOMEM; 2591d68314aSopenharmony_ci+ goto errout; 2601d68314aSopenharmony_ci+ } 2611d68314aSopenharmony_ci ae->reqid = ae_id->reqid; 2621d68314aSopenharmony_ci ae->flags = ae_id->flags; 2631d68314aSopenharmony_ci ae->ce_mask |= (XFRM_AE_ATTR_DADDR | XFRM_AE_ATTR_FAMILY | XFRM_AE_ATTR_SPI | 2641d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/xfrm/sa.c libnl-3.7.0_new/lib/xfrm/sa.c 2651d68314aSopenharmony_ci--- libnl-3.7.0/lib/xfrm/sa.c 2022-05-24 16:55:12.000000000 +0800 2661d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/xfrm/sa.c 2024-06-03 18:32:07.233173600 +0800 2671d68314aSopenharmony_ci@@ -415,6 +415,7 @@ 2681d68314aSopenharmony_ci char flags[128], mode[128]; 2691d68314aSopenharmony_ci time_t add_time, use_time; 2701d68314aSopenharmony_ci struct tm *add_time_tm, *use_time_tm; 2711d68314aSopenharmony_ci+ struct tm tm_buf; 2721d68314aSopenharmony_ci 2731d68314aSopenharmony_ci nl_dump_line(p, "src %s dst %s family: %s\n", nl_addr2str(sa->saddr, src, sizeof(src)), 2741d68314aSopenharmony_ci nl_addr2str(sa->id.daddr, dst, sizeof(dst)), 2751d68314aSopenharmony_ci@@ -467,7 +468,7 @@ 2761d68314aSopenharmony_ci if (sa->curlft.add_time != 0) 2771d68314aSopenharmony_ci { 2781d68314aSopenharmony_ci add_time = sa->curlft.add_time; 2791d68314aSopenharmony_ci- add_time_tm = gmtime (&add_time); 2801d68314aSopenharmony_ci+ add_time_tm = gmtime_r (&add_time, &tm_buf); 2811d68314aSopenharmony_ci strftime (flags, 128, "%Y-%m-%d %H-%M-%S", add_time_tm); 2821d68314aSopenharmony_ci } 2831d68314aSopenharmony_ci else 2841d68314aSopenharmony_ci@@ -478,7 +479,7 @@ 2851d68314aSopenharmony_ci if (sa->curlft.use_time != 0) 2861d68314aSopenharmony_ci { 2871d68314aSopenharmony_ci use_time = sa->curlft.use_time; 2881d68314aSopenharmony_ci- use_time_tm = gmtime (&use_time); 2891d68314aSopenharmony_ci+ use_time_tm = gmtime_r (&use_time, &tm_buf); 2901d68314aSopenharmony_ci strftime (mode, 128, "%Y-%m-%d %H-%M-%S", use_time_tm); 2911d68314aSopenharmony_ci } 2921d68314aSopenharmony_ci else 2931d68314aSopenharmony_ci@@ -717,9 +718,19 @@ 2941d68314aSopenharmony_ci goto errout; 2951d68314aSopenharmony_ci 2961d68314aSopenharmony_ci if (sa_info->sel.family == AF_INET) 2971d68314aSopenharmony_ci- addr = nl_addr_build (sa_info->sel.family, &sa_info->sel.daddr.a4, sizeof (sa_info->sel.daddr.a4)); 2981d68314aSopenharmony_ci+ { 2991d68314aSopenharmony_ci+ if (!(addr = nl_addr_build (sa_info->sel.family, &sa_info->sel.daddr.a4, sizeof (sa_info->sel.daddr.a4)))) { 3001d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3011d68314aSopenharmony_ci+ goto errout; 3021d68314aSopenharmony_ci+ } 3031d68314aSopenharmony_ci+ } 3041d68314aSopenharmony_ci else 3051d68314aSopenharmony_ci- addr = nl_addr_build (sa_info->sel.family, &sa_info->sel.daddr.a6, sizeof (sa_info->sel.daddr.a6)); 3061d68314aSopenharmony_ci+ { 3071d68314aSopenharmony_ci+ if (!(addr = nl_addr_build (sa_info->sel.family, &sa_info->sel.daddr.a6, sizeof (sa_info->sel.daddr.a6)))) { 3081d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3091d68314aSopenharmony_ci+ goto errout; 3101d68314aSopenharmony_ci+ } 3111d68314aSopenharmony_ci+ } 3121d68314aSopenharmony_ci nl_addr_set_prefixlen (addr, sa_info->sel.prefixlen_d); 3131d68314aSopenharmony_ci xfrmnl_sel_set_daddr (sa->sel, addr); 3141d68314aSopenharmony_ci /* Drop the reference count from the above set operation */ 3151d68314aSopenharmony_ci@@ -727,9 +738,19 @@ 3161d68314aSopenharmony_ci xfrmnl_sel_set_prefixlen_d (sa->sel, sa_info->sel.prefixlen_d); 3171d68314aSopenharmony_ci 3181d68314aSopenharmony_ci if (sa_info->sel.family == AF_INET) 3191d68314aSopenharmony_ci- addr = nl_addr_build (sa_info->sel.family, &sa_info->sel.saddr.a4, sizeof (sa_info->sel.saddr.a4)); 3201d68314aSopenharmony_ci+ { 3211d68314aSopenharmony_ci+ if (!(addr = nl_addr_build (sa_info->sel.family, &sa_info->sel.saddr.a4, sizeof (sa_info->sel.saddr.a4)))) { 3221d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3231d68314aSopenharmony_ci+ goto errout; 3241d68314aSopenharmony_ci+ } 3251d68314aSopenharmony_ci+ } 3261d68314aSopenharmony_ci else 3271d68314aSopenharmony_ci- addr = nl_addr_build (sa_info->sel.family, &sa_info->sel.saddr.a6, sizeof (sa_info->sel.saddr.a6)); 3281d68314aSopenharmony_ci+ { 3291d68314aSopenharmony_ci+ if (!(addr = nl_addr_build (sa_info->sel.family, &sa_info->sel.saddr.a6, sizeof (sa_info->sel.saddr.a6)))) { 3301d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3311d68314aSopenharmony_ci+ goto errout; 3321d68314aSopenharmony_ci+ } 3331d68314aSopenharmony_ci+ } 3341d68314aSopenharmony_ci nl_addr_set_prefixlen (addr, sa_info->sel.prefixlen_s); 3351d68314aSopenharmony_ci xfrmnl_sel_set_saddr (sa->sel, addr); 3361d68314aSopenharmony_ci /* Drop the reference count from the above set operation */ 3371d68314aSopenharmony_ci@@ -747,17 +768,37 @@ 3381d68314aSopenharmony_ci sa->ce_mask |= XFRM_SA_ATTR_SEL; 3391d68314aSopenharmony_ci 3401d68314aSopenharmony_ci if (sa_info->family == AF_INET) 3411d68314aSopenharmony_ci- sa->id.daddr = nl_addr_build (sa_info->family, &sa_info->id.daddr.a4, sizeof (sa_info->id.daddr.a4)); 3421d68314aSopenharmony_ci+ { 3431d68314aSopenharmony_ci+ if (!(sa->id.daddr = nl_addr_build (sa_info->family, &sa_info->id.daddr.a4, sizeof (sa_info->id.daddr.a4)))) { 3441d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3451d68314aSopenharmony_ci+ goto errout; 3461d68314aSopenharmony_ci+ } 3471d68314aSopenharmony_ci+ } 3481d68314aSopenharmony_ci else 3491d68314aSopenharmony_ci- sa->id.daddr = nl_addr_build (sa_info->family, &sa_info->id.daddr.a6, sizeof (sa_info->id.daddr.a6)); 3501d68314aSopenharmony_ci+ { 3511d68314aSopenharmony_ci+ if (!(sa->id.daddr = nl_addr_build (sa_info->family, &sa_info->id.daddr.a6, sizeof (sa_info->id.daddr.a6)))) { 3521d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3531d68314aSopenharmony_ci+ goto errout; 3541d68314aSopenharmony_ci+ } 3551d68314aSopenharmony_ci+ } 3561d68314aSopenharmony_ci sa->id.spi = ntohl(sa_info->id.spi); 3571d68314aSopenharmony_ci sa->id.proto = sa_info->id.proto; 3581d68314aSopenharmony_ci sa->ce_mask |= (XFRM_SA_ATTR_DADDR | XFRM_SA_ATTR_SPI | XFRM_SA_ATTR_PROTO); 3591d68314aSopenharmony_ci 3601d68314aSopenharmony_ci if (sa_info->family == AF_INET) 3611d68314aSopenharmony_ci- sa->saddr = nl_addr_build (sa_info->family, &sa_info->saddr.a4, sizeof (sa_info->saddr.a4)); 3621d68314aSopenharmony_ci+ { 3631d68314aSopenharmony_ci+ if (!(sa->saddr = nl_addr_build (sa_info->family, &sa_info->saddr.a4, sizeof (sa_info->saddr.a4)))) { 3641d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3651d68314aSopenharmony_ci+ goto errout; 3661d68314aSopenharmony_ci+ } 3671d68314aSopenharmony_ci+ } 3681d68314aSopenharmony_ci else 3691d68314aSopenharmony_ci- sa->saddr = nl_addr_build (sa_info->family, &sa_info->saddr.a6, sizeof (sa_info->saddr.a6)); 3701d68314aSopenharmony_ci+ { 3711d68314aSopenharmony_ci+ if (!(sa->saddr = nl_addr_build (sa_info->family, &sa_info->saddr.a6, sizeof (sa_info->saddr.a6)))) { 3721d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3731d68314aSopenharmony_ci+ goto errout; 3741d68314aSopenharmony_ci+ } 3751d68314aSopenharmony_ci+ } 3761d68314aSopenharmony_ci sa->ce_mask |= XFRM_SA_ATTR_SADDR; 3771d68314aSopenharmony_ci 3781d68314aSopenharmony_ci sa->lft->soft_byte_limit = sa_info->lft.soft_byte_limit; 3791d68314aSopenharmony_ci@@ -865,9 +906,19 @@ 3801d68314aSopenharmony_ci sa->encap->encap_sport = ntohs(encap->encap_sport); 3811d68314aSopenharmony_ci sa->encap->encap_dport = ntohs(encap->encap_dport); 3821d68314aSopenharmony_ci if (sa_info->family == AF_INET) 3831d68314aSopenharmony_ci- sa->encap->encap_oa = nl_addr_build (sa_info->family, &encap->encap_oa.a4, sizeof (encap->encap_oa.a4)); 3841d68314aSopenharmony_ci+ { 3851d68314aSopenharmony_ci+ if (!(sa->encap->encap_oa = nl_addr_build (sa_info->family, &encap->encap_oa.a4, sizeof (encap->encap_oa.a4)))) { 3861d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3871d68314aSopenharmony_ci+ goto errout; 3881d68314aSopenharmony_ci+ } 3891d68314aSopenharmony_ci+ } 3901d68314aSopenharmony_ci else 3911d68314aSopenharmony_ci- sa->encap->encap_oa = nl_addr_build (sa_info->family, &encap->encap_oa.a6, sizeof (encap->encap_oa.a6)); 3921d68314aSopenharmony_ci+ { 3931d68314aSopenharmony_ci+ if (!(sa->encap->encap_oa = nl_addr_build (sa_info->family, &encap->encap_oa.a6, sizeof (encap->encap_oa.a6)))) { 3941d68314aSopenharmony_ci+ err = -NLE_NOMEM; 3951d68314aSopenharmony_ci+ goto errout; 3961d68314aSopenharmony_ci+ } 3971d68314aSopenharmony_ci+ } 3981d68314aSopenharmony_ci sa->ce_mask |= XFRM_SA_ATTR_ENCAP; 3991d68314aSopenharmony_ci } 4001d68314aSopenharmony_ci 4011d68314aSopenharmony_ci@@ -879,13 +930,19 @@ 4021d68314aSopenharmony_ci if (tb[XFRMA_COADDR]) { 4031d68314aSopenharmony_ci if (sa_info->family == AF_INET) 4041d68314aSopenharmony_ci { 4051d68314aSopenharmony_ci- sa->coaddr = nl_addr_build(sa_info->family, nla_data(tb[XFRMA_COADDR]), 4061d68314aSopenharmony_ci- sizeof (uint32_t)); 4071d68314aSopenharmony_ci+ if (!(sa->coaddr = nl_addr_build( 4081d68314aSopenharmony_ci+ sa_info->family, nla_data(tb[XFRMA_COADDR]), sizeof (uint32_t)))) { 4091d68314aSopenharmony_ci+ err = -NLE_NOMEM; 4101d68314aSopenharmony_ci+ goto errout; 4111d68314aSopenharmony_ci+ } 4121d68314aSopenharmony_ci } 4131d68314aSopenharmony_ci else 4141d68314aSopenharmony_ci { 4151d68314aSopenharmony_ci- sa->coaddr = nl_addr_build(sa_info->family, nla_data(tb[XFRMA_COADDR]), 4161d68314aSopenharmony_ci- sizeof (uint32_t) * 4); 4171d68314aSopenharmony_ci+ if (!(sa->coaddr = nl_addr_build( 4181d68314aSopenharmony_ci+ sa_info->family, nla_data(tb[XFRMA_COADDR]), sizeof (uint32_t) * 4))) { 4191d68314aSopenharmony_ci+ err = -NLE_NOMEM; 4201d68314aSopenharmony_ci+ goto errout; 4211d68314aSopenharmony_ci+ } 4221d68314aSopenharmony_ci } 4231d68314aSopenharmony_ci sa->ce_mask |= XFRM_SA_ATTR_COADDR; 4241d68314aSopenharmony_ci } 4251d68314aSopenharmony_cidiff -urN libnl-3.7.0/lib/xfrm/sp.c libnl-3.7.0_new/lib/xfrm/sp.c 4261d68314aSopenharmony_ci--- libnl-3.7.0/lib/xfrm/sp.c 2022-05-24 16:55:12.000000000 +0800 4271d68314aSopenharmony_ci+++ libnl-3.7.0_new/lib/xfrm/sp.c 2024-06-03 17:43:31.464119900 +0800 4281d68314aSopenharmony_ci@@ -324,6 +324,7 @@ 4291d68314aSopenharmony_ci char dst[INET6_ADDRSTRLEN+5], src[INET6_ADDRSTRLEN+5]; 4301d68314aSopenharmony_ci time_t add_time, use_time; 4311d68314aSopenharmony_ci struct tm *add_time_tm, *use_time_tm; 4321d68314aSopenharmony_ci+ struct tm tm_buf; 4331d68314aSopenharmony_ci 4341d68314aSopenharmony_ci nl_addr2str(xfrmnl_sel_get_saddr (sp->sel), src, sizeof(src)); 4351d68314aSopenharmony_ci nl_addr2str (xfrmnl_sel_get_daddr (sp->sel), dst, sizeof (dst)); 4361d68314aSopenharmony_ci@@ -384,7 +385,7 @@ 4371d68314aSopenharmony_ci if (sp->curlft.add_time != 0) 4381d68314aSopenharmony_ci { 4391d68314aSopenharmony_ci add_time = sp->curlft.add_time; 4401d68314aSopenharmony_ci- add_time_tm = gmtime (&add_time); 4411d68314aSopenharmony_ci+ add_time_tm = gmtime_r (&add_time, &tm_buf); 4421d68314aSopenharmony_ci strftime (dst, INET6_ADDRSTRLEN+5, "%Y-%m-%d %H-%M-%S", add_time_tm); 4431d68314aSopenharmony_ci } 4441d68314aSopenharmony_ci else 4451d68314aSopenharmony_ci@@ -395,7 +396,7 @@ 4461d68314aSopenharmony_ci if (sp->curlft.use_time != 0) 4471d68314aSopenharmony_ci { 4481d68314aSopenharmony_ci use_time = sp->curlft.use_time; 4491d68314aSopenharmony_ci- use_time_tm = gmtime (&use_time); 4501d68314aSopenharmony_ci+ use_time_tm = gmtime_r (&use_time, &tm_buf); 4511d68314aSopenharmony_ci strftime (src, INET6_ADDRSTRLEN+5, "%Y-%m-%d %H-%M-%S", use_time_tm); 4521d68314aSopenharmony_ci } 4531d68314aSopenharmony_ci else 4541d68314aSopenharmony_ci@@ -557,19 +558,43 @@ 4551d68314aSopenharmony_ci } 4561d68314aSopenharmony_ci 4571d68314aSopenharmony_ci if (sp_info->sel.family == AF_INET) 4581d68314aSopenharmony_ci- addr = nl_addr_build (sp_info->sel.family, &sp_info->sel.daddr.a4, sizeof (sp_info->sel.daddr.a4)); 4591d68314aSopenharmony_ci+ { 4601d68314aSopenharmony_ci+ if (!(addr = nl_addr_build (sp_info->sel.family, &sp_info->sel.daddr.a4, sizeof (sp_info->sel.daddr.a4)))) { 4611d68314aSopenharmony_ci+ err = -NLE_NOMEM; 4621d68314aSopenharmony_ci+ goto errout; 4631d68314aSopenharmony_ci+ } 4641d68314aSopenharmony_ci+ } 4651d68314aSopenharmony_ci else 4661d68314aSopenharmony_ci- addr = nl_addr_build (sp_info->sel.family, &sp_info->sel.daddr.a6, sizeof (sp_info->sel.daddr.a6)); 4671d68314aSopenharmony_ci+ { 4681d68314aSopenharmony_ci+ if (!(addr = nl_addr_build (sp_info->sel.family, &sp_info->sel.daddr.a6, sizeof (sp_info->sel.daddr.a6)))) { 4691d68314aSopenharmony_ci+ err = -NLE_NOMEM; 4701d68314aSopenharmony_ci+ goto errout; 4711d68314aSopenharmony_ci+ } 4721d68314aSopenharmony_ci+ } 4731d68314aSopenharmony_ci nl_addr_set_prefixlen (addr, sp_info->sel.prefixlen_d); 4741d68314aSopenharmony_ci xfrmnl_sel_set_daddr (sp->sel, addr); 4751d68314aSopenharmony_ci+ /* Drop the reference count from the above set operation */ 4761d68314aSopenharmony_ci+ nl_addr_put(addr); 4771d68314aSopenharmony_ci xfrmnl_sel_set_prefixlen_d (sp->sel, sp_info->sel.prefixlen_d); 4781d68314aSopenharmony_ci 4791d68314aSopenharmony_ci if (sp_info->sel.family == AF_INET) 4801d68314aSopenharmony_ci- addr = nl_addr_build (sp_info->sel.family, &sp_info->sel.saddr.a4, sizeof (sp_info->sel.saddr.a4)); 4811d68314aSopenharmony_ci+ { 4821d68314aSopenharmony_ci+ if (!(addr = nl_addr_build (sp_info->sel.family, &sp_info->sel.saddr.a4, sizeof (sp_info->sel.saddr.a4)))) { 4831d68314aSopenharmony_ci+ err = -NLE_NOMEM; 4841d68314aSopenharmony_ci+ goto errout; 4851d68314aSopenharmony_ci+ } 4861d68314aSopenharmony_ci+ } 4871d68314aSopenharmony_ci else 4881d68314aSopenharmony_ci- addr = nl_addr_build (sp_info->sel.family, &sp_info->sel.saddr.a6, sizeof (sp_info->sel.saddr.a6)); 4891d68314aSopenharmony_ci+ { 4901d68314aSopenharmony_ci+ if (!(addr = nl_addr_build (sp_info->sel.family, &sp_info->sel.saddr.a6, sizeof (sp_info->sel.saddr.a6)))) { 4911d68314aSopenharmony_ci+ err = -NLE_NOMEM; 4921d68314aSopenharmony_ci+ goto errout; 4931d68314aSopenharmony_ci+ } 4941d68314aSopenharmony_ci+ } 4951d68314aSopenharmony_ci nl_addr_set_prefixlen (addr, sp_info->sel.prefixlen_s); 4961d68314aSopenharmony_ci xfrmnl_sel_set_saddr (sp->sel, addr); 4971d68314aSopenharmony_ci+ /* Drop the reference count from the above set operation */ 4981d68314aSopenharmony_ci+ nl_addr_put(addr); 4991d68314aSopenharmony_ci xfrmnl_sel_set_prefixlen_s (sp->sel, sp_info->sel.prefixlen_s); 5001d68314aSopenharmony_ci 5011d68314aSopenharmony_ci xfrmnl_sel_set_dport (sp->sel, ntohs (sp_info->sel.dport)); 5021d68314aSopenharmony_ci@@ -628,13 +653,13 @@ 5031d68314aSopenharmony_ci 5041d68314aSopenharmony_ci if (tb[XFRMA_TMPL]) { 5051d68314aSopenharmony_ci struct xfrm_user_tmpl* tmpl = nla_data(tb[XFRMA_TMPL]); 5061d68314aSopenharmony_ci- struct xfrmnl_user_tmpl* sputmpl; 5071d68314aSopenharmony_ci uint32_t i; 5081d68314aSopenharmony_ci uint32_t num_tmpls = nla_len(tb[XFRMA_TMPL]) / sizeof (*tmpl); 5091d68314aSopenharmony_ci struct nl_addr* addr; 5101d68314aSopenharmony_ci 5111d68314aSopenharmony_ci for (i = 0; (i < num_tmpls) && (tmpl); i ++, tmpl++) 5121d68314aSopenharmony_ci { 5131d68314aSopenharmony_ci+ _nl_auto_xfrmnl_user_tmpl struct xfrmnl_user_tmpl *sputmpl = NULL; 5141d68314aSopenharmony_ci if ((sputmpl = xfrmnl_user_tmpl_alloc ()) == NULL) 5151d68314aSopenharmony_ci { 5161d68314aSopenharmony_ci err = -NLE_NOMEM; 5171d68314aSopenharmony_ci@@ -642,19 +667,43 @@ 5181d68314aSopenharmony_ci } 5191d68314aSopenharmony_ci 5201d68314aSopenharmony_ci if (tmpl->family == AF_INET) 5211d68314aSopenharmony_ci- addr = nl_addr_build(tmpl->family, &tmpl->id.daddr.a4, sizeof (tmpl->id.daddr.a4)); 5221d68314aSopenharmony_ci+ { 5231d68314aSopenharmony_ci+ if (!(addr = nl_addr_build(tmpl->family, &tmpl->id.daddr.a4, sizeof (tmpl->id.daddr.a4)))) { 5241d68314aSopenharmony_ci+ err = -NLE_NOMEM; 5251d68314aSopenharmony_ci+ goto errout; 5261d68314aSopenharmony_ci+ } 5271d68314aSopenharmony_ci+ } 5281d68314aSopenharmony_ci else 5291d68314aSopenharmony_ci- addr = nl_addr_build(tmpl->family, &tmpl->id.daddr.a6, sizeof (tmpl->id.daddr.a6)); 5301d68314aSopenharmony_ci+ { 5311d68314aSopenharmony_ci+ if (!(addr = nl_addr_build(tmpl->family, &tmpl->id.daddr.a6, sizeof (tmpl->id.daddr.a6)))) { 5321d68314aSopenharmony_ci+ err = -NLE_NOMEM; 5331d68314aSopenharmony_ci+ goto errout; 5341d68314aSopenharmony_ci+ } 5351d68314aSopenharmony_ci+ } 5361d68314aSopenharmony_ci xfrmnl_user_tmpl_set_daddr (sputmpl, addr); 5371d68314aSopenharmony_ci+ /* Drop the reference count from the above set operation */ 5381d68314aSopenharmony_ci+ nl_addr_put(addr); 5391d68314aSopenharmony_ci xfrmnl_user_tmpl_set_spi (sputmpl, ntohl(tmpl->id.spi)); 5401d68314aSopenharmony_ci xfrmnl_user_tmpl_set_proto (sputmpl, tmpl->id.proto); 5411d68314aSopenharmony_ci xfrmnl_user_tmpl_set_family (sputmpl, tmpl->family); 5421d68314aSopenharmony_ci 5431d68314aSopenharmony_ci if (tmpl->family == AF_INET) 5441d68314aSopenharmony_ci- addr = nl_addr_build(tmpl->family, &tmpl->saddr.a4, sizeof (tmpl->saddr.a4)); 5451d68314aSopenharmony_ci+ { 5461d68314aSopenharmony_ci+ if (!(addr = nl_addr_build(tmpl->family, &tmpl->saddr.a4, sizeof (tmpl->saddr.a4)))) { 5471d68314aSopenharmony_ci+ err = -NLE_NOMEM; 5481d68314aSopenharmony_ci+ goto errout; 5491d68314aSopenharmony_ci+ } 5501d68314aSopenharmony_ci+ } 5511d68314aSopenharmony_ci else 5521d68314aSopenharmony_ci- addr = nl_addr_build(tmpl->family, &tmpl->saddr.a6, sizeof (tmpl->saddr.a6)); 5531d68314aSopenharmony_ci+ { 5541d68314aSopenharmony_ci+ if (!(addr = nl_addr_build(tmpl->family, &tmpl->saddr.a6, sizeof (tmpl->saddr.a6)))) { 5551d68314aSopenharmony_ci+ err = -NLE_NOMEM; 5561d68314aSopenharmony_ci+ goto errout; 5571d68314aSopenharmony_ci+ } 5581d68314aSopenharmony_ci+ } 5591d68314aSopenharmony_ci xfrmnl_user_tmpl_set_saddr (sputmpl, addr); 5601d68314aSopenharmony_ci+ /* Drop the reference count from the above set operation */ 5611d68314aSopenharmony_ci+ nl_addr_put(addr); 5621d68314aSopenharmony_ci 5631d68314aSopenharmony_ci xfrmnl_user_tmpl_set_reqid (sputmpl, tmpl->reqid); 5641d68314aSopenharmony_ci xfrmnl_user_tmpl_set_mode (sputmpl, tmpl->mode); 5651d68314aSopenharmony_ci@@ -663,7 +712,7 @@ 5661d68314aSopenharmony_ci xfrmnl_user_tmpl_set_aalgos (sputmpl, tmpl->aalgos); 5671d68314aSopenharmony_ci xfrmnl_user_tmpl_set_ealgos (sputmpl, tmpl->ealgos); 5681d68314aSopenharmony_ci xfrmnl_user_tmpl_set_calgos (sputmpl, tmpl->calgos); 5691d68314aSopenharmony_ci- xfrmnl_sp_add_usertemplate (sp, sputmpl); 5701d68314aSopenharmony_ci+ xfrmnl_sp_add_usertemplate (sp, _nl_steal_pointer(&sputmpl)); 5711d68314aSopenharmony_ci 5721d68314aSopenharmony_ci sp->ce_mask |= XFRM_SP_ATTR_TMPL; 5731d68314aSopenharmony_ci } 5741d68314aSopenharmony_ci@@ -1316,6 +1365,8 @@ 5751d68314aSopenharmony_ci if (sp->ce_mask & XFRM_SP_ATTR_TMPL) { 5761d68314aSopenharmony_ci sp->nr_user_tmpl--; 5771d68314aSopenharmony_ci nl_list_del(&utmpl->utmpl_list); 5781d68314aSopenharmony_ci+ if (sp->nr_user_tmpl == 0) 5791d68314aSopenharmony_ci+ sp->ce_mask &= ~XFRM_SP_ATTR_TMPL; 5801d68314aSopenharmony_ci } 5811d68314aSopenharmony_ci } 5821d68314aSopenharmony_ci 5831d68314aSopenharmony_cidiff -urN libnl-3.7.0/tests/params.h libnl-3.7.0_new/tests/params.h 5841d68314aSopenharmony_ci--- libnl-3.7.0/tests/params.h 1970-01-01 08:00:00.000000000 +0800 5851d68314aSopenharmony_ci+++ libnl-3.7.0_new/tests/params.h 2024-06-03 16:23:13.861244200 +0800 5861d68314aSopenharmony_ci@@ -0,0 +1,5 @@ 5871d68314aSopenharmony_ci+#define DST_ADDR "addr" 5881d68314aSopenharmony_ci+#define IP "ip" 5891d68314aSopenharmony_ci+#define NEXTHOP "dev=1,via=2" 5901d68314aSopenharmony_ci+#define DEV_NAME "dev_name" 5911d68314aSopenharmony_ci+ 5921d68314aSopenharmony_cidiff -urN libnl-3.7.0/tests/test-add-delete-addr.c libnl-3.7.0_new/tests/test-add-delete-addr.c 5931d68314aSopenharmony_ci--- libnl-3.7.0/tests/test-add-delete-addr.c 1970-01-01 08:00:00.000000000 +0800 5941d68314aSopenharmony_ci+++ libnl-3.7.0_new/tests/test-add-delete-addr.c 2024-06-03 16:23:13.861244200 +0800 5951d68314aSopenharmony_ci@@ -0,0 +1,39 @@ 5961d68314aSopenharmony_ci+#include <netlink/cli/utils.h> 5971d68314aSopenharmony_ci+#include <netlink/cli/addr.h> 5981d68314aSopenharmony_ci+#include <netlink/cli/link.h> 5991d68314aSopenharmony_ci+#include <linux/netlink.h> 6001d68314aSopenharmony_ci+#include <stdio.h> 6011d68314aSopenharmony_ci+#include <params.h> 6021d68314aSopenharmony_ci+ 6031d68314aSopenharmony_ci+ 6041d68314aSopenharmony_ci+int main(int argc, char *argv[]) 6051d68314aSopenharmony_ci+{ 6061d68314aSopenharmony_ci+ struct nl_sock *sock; 6071d68314aSopenharmony_ci+ struct rtnl_addr *addr; 6081d68314aSopenharmony_ci+ struct nl_cache *link_cache; 6091d68314aSopenharmony_ci+ int err = 0, nlflags = NLM_F_CREATE; 6101d68314aSopenharmony_ci+ 6111d68314aSopenharmony_ci+ sock = nl_cli_alloc_socket(); 6121d68314aSopenharmony_ci+ nl_cli_connect(sock, NETLINK_ROUTE); 6131d68314aSopenharmony_ci+ link_cache = nl_cli_link_alloc_cache(sock); 6141d68314aSopenharmony_ci+ addr = nl_cli_addr_alloc(); 6151d68314aSopenharmony_ci+ 6161d68314aSopenharmony_ci+ nl_cli_addr_parse_local(addr, IP); 6171d68314aSopenharmony_ci+ nl_cli_addr_parse_dev(addr, link_cache, DEV_NAME); 6181d68314aSopenharmony_ci+ 6191d68314aSopenharmony_ci+ if ((err = rtnl_addr_add(sock, addr, nlflags)) < 0) { 6201d68314aSopenharmony_ci+ printf("Unable to add route: %s", nl_geterror(err)); 6211d68314aSopenharmony_ci+ goto END; 6221d68314aSopenharmony_ci+ } 6231d68314aSopenharmony_ci+ 6241d68314aSopenharmony_ci+ if ((err = rtnl_addr_delete(sock, addr, nlflags)) < 0) { 6251d68314aSopenharmony_ci+ printf("Unable to add route: %s", nl_geterror(err)); 6261d68314aSopenharmony_ci+ goto END; 6271d68314aSopenharmony_ci+ } 6281d68314aSopenharmony_ci+ 6291d68314aSopenharmony_ci+END: 6301d68314aSopenharmony_ci+ rtnl_addr_put(addr); 6311d68314aSopenharmony_ci+ nl_cache_put(link_cache); 6321d68314aSopenharmony_ci+ nl_socket_free(sock); 6331d68314aSopenharmony_ci+ return err; 6341d68314aSopenharmony_ci+} 6351d68314aSopenharmony_cidiff -urN libnl-3.7.0/tests/test-add-delete-class.c libnl-3.7.0_new/tests/test-add-delete-class.c 6361d68314aSopenharmony_ci--- libnl-3.7.0/tests/test-add-delete-class.c 1970-01-01 08:00:00.000000000 +0800 6371d68314aSopenharmony_ci+++ libnl-3.7.0_new/tests/test-add-delete-class.c 2024-06-03 16:23:13.876242300 +0800 6381d68314aSopenharmony_ci@@ -0,0 +1,142 @@ 6391d68314aSopenharmony_ci+#include <netlink/cli/utils.h> 6401d68314aSopenharmony_ci+#include <netlink/cli/tc.h> 6411d68314aSopenharmony_ci+#include <netlink/cli/class.h> 6421d68314aSopenharmony_ci+#include <netlink/cli/link.h> 6431d68314aSopenharmony_ci+#include <netlink-private/route/tc-api.h> 6441d68314aSopenharmony_ci+#include <linux/netlink.h> 6451d68314aSopenharmony_ci+#include <stdio.h> 6461d68314aSopenharmony_ci+#include <params.h> 6471d68314aSopenharmony_ci+ 6481d68314aSopenharmony_ci+static int default_yes = 0, deleted = 0, interactive = 0; 6491d68314aSopenharmony_ci+static struct nl_sock *sk; 6501d68314aSopenharmony_ci+ 6511d68314aSopenharmony_ci+static int test_add_class() 6521d68314aSopenharmony_ci+{ 6531d68314aSopenharmony_ci+ struct rtnl_class *class; 6541d68314aSopenharmony_ci+ struct rtnl_tc *tc; 6551d68314aSopenharmony_ci+ struct nl_cache *link_cache; 6561d68314aSopenharmony_ci+ struct nl_cli_tc_module *tm; 6571d68314aSopenharmony_ci+ struct rtnl_tc_ops *ops; 6581d68314aSopenharmony_ci+ int err = 0, flags = NLM_F_CREATE | NLM_F_EXCL; 6591d68314aSopenharmony_ci+ char kind[] = "htb"; 6601d68314aSopenharmony_ci+ char *rate[] = {DEV_NAME, "root", "htb", "--rate=100mbit"}; 6611d68314aSopenharmony_ci+ 6621d68314aSopenharmony_ci+ sk = nl_cli_alloc_socket(); 6631d68314aSopenharmony_ci+ nl_cli_connect(sk, NETLINK_ROUTE); 6641d68314aSopenharmony_ci+ link_cache = nl_cli_link_alloc_cache(sk); 6651d68314aSopenharmony_ci+ class = nl_cli_class_alloc(); 6661d68314aSopenharmony_ci+ tc = (struct rtnl_tc *) class; 6671d68314aSopenharmony_ci+ 6681d68314aSopenharmony_ci+ nl_cli_tc_parse_dev(tc, link_cache, DEV_NAME); 6691d68314aSopenharmony_ci+ nl_cli_tc_parse_parent(tc, "root"); 6701d68314aSopenharmony_ci+ if (!rtnl_tc_get_ifindex(tc)) { 6711d68314aSopenharmony_ci+ printf("You must specify a network device (--dev=XXX)\n"); 6721d68314aSopenharmony_ci+ err = -1; 6731d68314aSopenharmony_ci+ goto END; 6741d68314aSopenharmony_ci+ } 6751d68314aSopenharmony_ci+ if (!rtnl_tc_get_parent(tc)) { 6761d68314aSopenharmony_ci+ printf("You must specify a parent (--parent=XXX)\n"); 6771d68314aSopenharmony_ci+ err = -1; 6781d68314aSopenharmony_ci+ goto END; 6791d68314aSopenharmony_ci+ } 6801d68314aSopenharmony_ci+ 6811d68314aSopenharmony_ci+ rtnl_tc_set_kind(tc, kind); 6821d68314aSopenharmony_ci+ if (!(ops = rtnl_tc_get_ops(tc))) { 6831d68314aSopenharmony_ci+ printf("Unknown class \"%s\"\n", kind); 6841d68314aSopenharmony_ci+ err = -1; 6851d68314aSopenharmony_ci+ goto END; 6861d68314aSopenharmony_ci+ } 6871d68314aSopenharmony_ci+ if (!(tm = nl_cli_tc_lookup(ops))) { 6881d68314aSopenharmony_ci+ printf("class type \"%s\" not supported.\n", kind); 6891d68314aSopenharmony_ci+ err = -1; 6901d68314aSopenharmony_ci+ goto END; 6911d68314aSopenharmony_ci+ } 6921d68314aSopenharmony_ci+ tm->tm_parse_argv(tc, 4, rate); 6931d68314aSopenharmony_ci+ 6941d68314aSopenharmony_ci+ if ((err = rtnl_class_add(sk, class, flags)) < 0) { 6951d68314aSopenharmony_ci+ printf("Unable to add class: %s\n", nl_geterror(err)); 6961d68314aSopenharmony_ci+ goto END; 6971d68314aSopenharmony_ci+ } 6981d68314aSopenharmony_ci+ 6991d68314aSopenharmony_ci+END: 7001d68314aSopenharmony_ci+ nl_cache_mngt_unprovide(link_cache); 7011d68314aSopenharmony_ci+ nl_cache_put(link_cache); 7021d68314aSopenharmony_ci+ rtnl_class_put(class); 7031d68314aSopenharmony_ci+ nl_socket_free(sk); 7041d68314aSopenharmony_ci+ return err; 7051d68314aSopenharmony_ci+} 7061d68314aSopenharmony_ci+ 7071d68314aSopenharmony_ci+ 7081d68314aSopenharmony_ci+static void delete_cb(struct nl_object *obj, void *arg) 7091d68314aSopenharmony_ci+{ 7101d68314aSopenharmony_ci+ struct rtnl_class *class = nl_object_priv(obj); 7111d68314aSopenharmony_ci+ struct nl_dump_params params = { 7121d68314aSopenharmony_ci+ .dp_type = NL_DUMP_LINE, 7131d68314aSopenharmony_ci+ .dp_fd = stdout, 7141d68314aSopenharmony_ci+ }; 7151d68314aSopenharmony_ci+ int err; 7161d68314aSopenharmony_ci+ 7171d68314aSopenharmony_ci+ if (interactive && !nl_cli_confirm(obj, ¶ms, default_yes)) 7181d68314aSopenharmony_ci+ return; 7191d68314aSopenharmony_ci+ 7201d68314aSopenharmony_ci+ if ((err = rtnl_class_delete(sk, class)) < 0) 7211d68314aSopenharmony_ci+ nl_cli_fatal(err, "Unable to delete class: %s\n", nl_geterror(err)); 7221d68314aSopenharmony_ci+ 7231d68314aSopenharmony_ci+ deleted++; 7241d68314aSopenharmony_ci+} 7251d68314aSopenharmony_ci+ 7261d68314aSopenharmony_ci+static int test_delete_class() 7271d68314aSopenharmony_ci+{ 7281d68314aSopenharmony_ci+ struct rtnl_class *class; 7291d68314aSopenharmony_ci+ struct rtnl_tc *tc; 7301d68314aSopenharmony_ci+ struct nl_cache *link_cache, *class_cache; 7311d68314aSopenharmony_ci+ struct nl_cli_tc_module *tm; 7321d68314aSopenharmony_ci+ struct rtnl_tc_ops *ops; 7331d68314aSopenharmony_ci+ char kind[] = "htb"; 7341d68314aSopenharmony_ci+ int err = 0; 7351d68314aSopenharmony_ci+ 7361d68314aSopenharmony_ci+ sk = nl_cli_alloc_socket(); 7371d68314aSopenharmony_ci+ nl_cli_connect(sk, NETLINK_ROUTE); 7381d68314aSopenharmony_ci+ link_cache = nl_cli_link_alloc_cache(sk); 7391d68314aSopenharmony_ci+ class = nl_cli_class_alloc(); 7401d68314aSopenharmony_ci+ tc = (struct rtnl_tc *) class; 7411d68314aSopenharmony_ci+ 7421d68314aSopenharmony_ci+ nl_cli_tc_parse_dev(tc, link_cache, DEV_NAME); 7431d68314aSopenharmony_ci+ nl_cli_tc_parse_parent(tc, "root"); 7441d68314aSopenharmony_ci+ if (!rtnl_tc_get_ifindex(tc)) { 7451d68314aSopenharmony_ci+ printf("You must specify a network device (--dev=XXX)\n"); 7461d68314aSopenharmony_ci+ err = -1; 7471d68314aSopenharmony_ci+ goto END; 7481d68314aSopenharmony_ci+ } 7491d68314aSopenharmony_ci+ if (!rtnl_tc_get_parent(tc)) { 7501d68314aSopenharmony_ci+ printf("You must specify a parent (--parent=XXX)\n"); 7511d68314aSopenharmony_ci+ err = -1; 7521d68314aSopenharmony_ci+ goto END; 7531d68314aSopenharmony_ci+ } 7541d68314aSopenharmony_ci+ rtnl_tc_set_kind(tc, kind); 7551d68314aSopenharmony_ci+ if (!(ops = rtnl_tc_get_ops(tc))) { 7561d68314aSopenharmony_ci+ printf("Unknown class \"%s\"\n", kind); 7571d68314aSopenharmony_ci+ err = -1; 7581d68314aSopenharmony_ci+ goto END; 7591d68314aSopenharmony_ci+ } 7601d68314aSopenharmony_ci+ class_cache = nl_cli_class_alloc_cache(sk, rtnl_tc_get_ifindex(tc)); 7611d68314aSopenharmony_ci+ nl_cache_foreach_filter(class_cache, OBJ_CAST(class), delete_cb, NULL); 7621d68314aSopenharmony_ci+ 7631d68314aSopenharmony_ci+END: 7641d68314aSopenharmony_ci+ nl_cache_put(link_cache); 7651d68314aSopenharmony_ci+ nl_socket_free(sk); 7661d68314aSopenharmony_ci+ rtnl_class_put(class); 7671d68314aSopenharmony_ci+ return err; 7681d68314aSopenharmony_ci+} 7691d68314aSopenharmony_ci+ 7701d68314aSopenharmony_ci+int main(int argc, char *argv[]) 7711d68314aSopenharmony_ci+{ 7721d68314aSopenharmony_ci+ int err = 0; 7731d68314aSopenharmony_ci+ if ((err = test_add_class()) < 0) { 7741d68314aSopenharmony_ci+ printf("Unable to add class\n"); 7751d68314aSopenharmony_ci+ } 7761d68314aSopenharmony_ci+ if ((err = test_delete_class()) < 0) { 7771d68314aSopenharmony_ci+ printf("Unable to delete class"); 7781d68314aSopenharmony_ci+ } 7791d68314aSopenharmony_ci+ return err; 7801d68314aSopenharmony_ci+} 7811d68314aSopenharmony_cidiff -urN libnl-3.7.0/tests/test-add-delete-neigh.c libnl-3.7.0_new/tests/test-add-delete-neigh.c 7821d68314aSopenharmony_ci--- libnl-3.7.0/tests/test-add-delete-neigh.c 1970-01-01 08:00:00.000000000 +0800 7831d68314aSopenharmony_ci+++ libnl-3.7.0_new/tests/test-add-delete-neigh.c 2024-06-03 16:23:13.876242300 +0800 7841d68314aSopenharmony_ci@@ -0,0 +1,41 @@ 7851d68314aSopenharmony_ci+#include <netlink/cli/utils.h> 7861d68314aSopenharmony_ci+#include <netlink/cli/neigh.h> 7871d68314aSopenharmony_ci+#include <netlink/cli/link.h> 7881d68314aSopenharmony_ci+#include <linux/netlink.h> 7891d68314aSopenharmony_ci+#include <stdio.h> 7901d68314aSopenharmony_ci+#include <params.h> 7911d68314aSopenharmony_ci+ 7921d68314aSopenharmony_ci+ 7931d68314aSopenharmony_ci+int main(int argc, char *argv[]) 7941d68314aSopenharmony_ci+{ 7951d68314aSopenharmony_ci+ struct nl_sock *sk; 7961d68314aSopenharmony_ci+ struct rtnl_neigh *neigh; 7971d68314aSopenharmony_ci+ struct nl_cache *link_cache; 7981d68314aSopenharmony_ci+ int err = 0, ok = 0, nlflags = NLM_F_REPLACE | NLM_F_CREATE; 7991d68314aSopenharmony_ci+ char lladdr[] = "AA:BB:CC:DD:EE:FF"; 8001d68314aSopenharmony_ci+ 8011d68314aSopenharmony_ci+ sk = nl_cli_alloc_socket(); 8021d68314aSopenharmony_ci+ nl_cli_connect(sk, NETLINK_ROUTE); 8031d68314aSopenharmony_ci+ link_cache = nl_cli_link_alloc_cache(sk); 8041d68314aSopenharmony_ci+ neigh = nl_cli_neigh_alloc(); 8051d68314aSopenharmony_ci+ 8061d68314aSopenharmony_ci+ nl_cli_neigh_parse_dst(neigh, DST_ADDR); 8071d68314aSopenharmony_ci+ nl_cli_neigh_parse_lladdr(neigh, lladdr); 8081d68314aSopenharmony_ci+ nl_cli_neigh_parse_dev(neigh, link_cache, DEV_NAME); 8091d68314aSopenharmony_ci+ 8101d68314aSopenharmony_ci+ if ((err = rtnl_neigh_add(sk, neigh, nlflags)) < 0){ 8111d68314aSopenharmony_ci+ printf("Unable to add neighbour: %s\n",nl_geterror(err)); 8121d68314aSopenharmony_ci+ goto END; 8131d68314aSopenharmony_ci+ } 8141d68314aSopenharmony_ci+ 8151d68314aSopenharmony_ci+ if ((err = rtnl_neigh_delete(sk, neigh, nlflags)) < 0){ 8161d68314aSopenharmony_ci+ printf("Unable to add neighbour: %s\n",nl_geterror(err)); 8171d68314aSopenharmony_ci+ goto END; 8181d68314aSopenharmony_ci+ } 8191d68314aSopenharmony_ci+ 8201d68314aSopenharmony_ci+END: 8211d68314aSopenharmony_ci+ nl_socket_free(sk); 8221d68314aSopenharmony_ci+ nl_cache_put(link_cache); 8231d68314aSopenharmony_ci+ rtnl_neigh_put(neigh); 8241d68314aSopenharmony_ci+ return err; 8251d68314aSopenharmony_ci+} 8261d68314aSopenharmony_cidiff -urN libnl-3.7.0/tests/test-add-delete-qdisc.c libnl-3.7.0_new/tests/test-add-delete-qdisc.c 8271d68314aSopenharmony_ci--- libnl-3.7.0/tests/test-add-delete-qdisc.c 1970-01-01 08:00:00.000000000 +0800 8281d68314aSopenharmony_ci+++ libnl-3.7.0_new/tests/test-add-delete-qdisc.c 2024-06-03 16:23:13.892190500 +0800 8291d68314aSopenharmony_ci@@ -0,0 +1,156 @@ 8301d68314aSopenharmony_ci+#include <netlink/cli/utils.h> 8311d68314aSopenharmony_ci+#include <netlink/cli/tc.h> 8321d68314aSopenharmony_ci+#include <netlink/cli/qdisc.h> 8331d68314aSopenharmony_ci+#include <netlink/cli/link.h> 8341d68314aSopenharmony_ci+#include <netlink-private/route/tc-api.h> 8351d68314aSopenharmony_ci+#include <linux/netlink.h> 8361d68314aSopenharmony_ci+#include <stdio.h> 8371d68314aSopenharmony_ci+#include <params.h> 8381d68314aSopenharmony_ci+ 8391d68314aSopenharmony_ci+ 8401d68314aSopenharmony_ci+static int default_yes = 0, deleted = 0, interactive = 0; 8411d68314aSopenharmony_ci+static struct nl_sock *sk; 8421d68314aSopenharmony_ci+ 8431d68314aSopenharmony_ci+static void delete_cb(struct nl_object *obj, void *arg) 8441d68314aSopenharmony_ci+{ 8451d68314aSopenharmony_ci+ struct rtnl_qdisc *qdisc = nl_object_priv(obj); 8461d68314aSopenharmony_ci+ struct nl_dump_params params = { 8471d68314aSopenharmony_ci+ .dp_type = NL_DUMP_LINE, 8481d68314aSopenharmony_ci+ .dp_fd = stdout, 8491d68314aSopenharmony_ci+ }; 8501d68314aSopenharmony_ci+ int err; 8511d68314aSopenharmony_ci+ 8521d68314aSopenharmony_ci+ /* Ignore default qdiscs, unable to delete */ 8531d68314aSopenharmony_ci+ if (rtnl_tc_get_handle((struct rtnl_tc *) qdisc) == 0) 8541d68314aSopenharmony_ci+ return; 8551d68314aSopenharmony_ci+ 8561d68314aSopenharmony_ci+ if (interactive && !nl_cli_confirm(obj, ¶ms, default_yes)) 8571d68314aSopenharmony_ci+ return; 8581d68314aSopenharmony_ci+ 8591d68314aSopenharmony_ci+ if ((err = rtnl_qdisc_delete(sk, qdisc)) < 0) { 8601d68314aSopenharmony_ci+ nl_cli_fatal(err, "Unable to delete qdisc: %s\n", nl_geterror(err)); 8611d68314aSopenharmony_ci+ } 8621d68314aSopenharmony_ci+ deleted++; 8631d68314aSopenharmony_ci+} 8641d68314aSopenharmony_ci+ 8651d68314aSopenharmony_ci+static int test_delete_qdisc() 8661d68314aSopenharmony_ci+{ 8671d68314aSopenharmony_ci+ struct rtnl_qdisc *qdisc; 8681d68314aSopenharmony_ci+ struct rtnl_tc *tc; 8691d68314aSopenharmony_ci+ struct nl_cache *link_cache, *qdisc_cache; 8701d68314aSopenharmony_ci+ struct nl_cli_tc_module *tm; 8711d68314aSopenharmony_ci+ struct rtnl_tc_ops *ops; 8721d68314aSopenharmony_ci+ char kind[] = "htb"; 8731d68314aSopenharmony_ci+ int err = 0; 8741d68314aSopenharmony_ci+ 8751d68314aSopenharmony_ci+ sk = nl_cli_alloc_socket(); 8761d68314aSopenharmony_ci+ nl_cli_connect(sk, NETLINK_ROUTE); 8771d68314aSopenharmony_ci+ link_cache = nl_cli_link_alloc_cache(sk); 8781d68314aSopenharmony_ci+ qdisc_cache = nl_cli_qdisc_alloc_cache(sk); 8791d68314aSopenharmony_ci+ qdisc = nl_cli_qdisc_alloc(); 8801d68314aSopenharmony_ci+ tc = (struct rtnl_tc *) qdisc; 8811d68314aSopenharmony_ci+ nl_cli_tc_parse_dev(tc, link_cache, DEV_NAME); 8821d68314aSopenharmony_ci+ nl_cli_tc_parse_parent(tc, "root"); 8831d68314aSopenharmony_ci+ 8841d68314aSopenharmony_ci+ if (!rtnl_tc_get_ifindex(tc)) { 8851d68314aSopenharmony_ci+ printf("You must specify a network device (--dev=XXX)"); 8861d68314aSopenharmony_ci+ goto END; 8871d68314aSopenharmony_ci+ } 8881d68314aSopenharmony_ci+ 8891d68314aSopenharmony_ci+ if (!rtnl_tc_get_parent(tc)) { 8901d68314aSopenharmony_ci+ printf("You must specify a parent"); 8911d68314aSopenharmony_ci+ goto END; 8921d68314aSopenharmony_ci+ } 8931d68314aSopenharmony_ci+ 8941d68314aSopenharmony_ci+ rtnl_tc_set_kind(tc, kind); 8951d68314aSopenharmony_ci+ if (!(ops = rtnl_tc_get_ops(tc))) { 8961d68314aSopenharmony_ci+ printf("Unknown qdisc \"%s\"", kind); 8971d68314aSopenharmony_ci+ goto END; 8981d68314aSopenharmony_ci+ } 8991d68314aSopenharmony_ci+ 9001d68314aSopenharmony_ci+ if (!(tm = nl_cli_tc_lookup(ops))) { 9011d68314aSopenharmony_ci+ nl_cli_fatal(ENOTSUP, "Qdisc type \"%s\" not supported.", kind); 9021d68314aSopenharmony_ci+ goto END; 9031d68314aSopenharmony_ci+ } 9041d68314aSopenharmony_ci+ 9051d68314aSopenharmony_ci+ 9061d68314aSopenharmony_ci+ nl_cache_foreach_filter(qdisc_cache, OBJ_CAST(qdisc), delete_cb, NULL); 9071d68314aSopenharmony_ci+ 9081d68314aSopenharmony_ci+END: 9091d68314aSopenharmony_ci+ nl_cache_put(link_cache); 9101d68314aSopenharmony_ci+ nl_cache_put(qdisc_cache); 9111d68314aSopenharmony_ci+ rtnl_qdisc_put(qdisc); 9121d68314aSopenharmony_ci+ nl_socket_free(sk); 9131d68314aSopenharmony_ci+ return err; 9141d68314aSopenharmony_ci+} 9151d68314aSopenharmony_ci+ 9161d68314aSopenharmony_ci+static int test_add_qdisc() 9171d68314aSopenharmony_ci+{ 9181d68314aSopenharmony_ci+ struct rtnl_qdisc *qdisc; 9191d68314aSopenharmony_ci+ struct rtnl_tc *tc; 9201d68314aSopenharmony_ci+ struct nl_cache *link_cache; 9211d68314aSopenharmony_ci+ struct nl_cli_tc_module *tm; 9221d68314aSopenharmony_ci+ struct rtnl_tc_ops *ops; 9231d68314aSopenharmony_ci+ char kind[] = "htb"; 9241d68314aSopenharmony_ci+ int err = 0, flags = NLM_F_CREATE | NLM_F_EXCL; 9251d68314aSopenharmony_ci+ 9261d68314aSopenharmony_ci+ if (!(sk = nl_socket_alloc())){ 9271d68314aSopenharmony_ci+ printf("Unable to allocate netlink socket\n"); 9281d68314aSopenharmony_ci+ return -1; 9291d68314aSopenharmony_ci+ } 9301d68314aSopenharmony_ci+ if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) { 9311d68314aSopenharmony_ci+ printf("Unable to connect netlink socket: %s\n", nl_geterror(err)); 9321d68314aSopenharmony_ci+ nl_socket_free(sk); 9331d68314aSopenharmony_ci+ return -1; 9341d68314aSopenharmony_ci+ } 9351d68314aSopenharmony_ci+ link_cache = nl_cli_link_alloc_cache(sk); 9361d68314aSopenharmony_ci+ qdisc = nl_cli_qdisc_alloc(); 9371d68314aSopenharmony_ci+ tc = (struct rtnl_tc *) qdisc; 9381d68314aSopenharmony_ci+ 9391d68314aSopenharmony_ci+ nl_cli_tc_parse_dev(tc, link_cache, DEV_NAME); 9401d68314aSopenharmony_ci+ nl_cli_tc_parse_parent(tc, "root"); 9411d68314aSopenharmony_ci+ 9421d68314aSopenharmony_ci+ if (!rtnl_tc_get_ifindex(tc)){ 9431d68314aSopenharmony_ci+ printf("You must specify a network device (--dev=XXX)\n"); 9441d68314aSopenharmony_ci+ goto END; 9451d68314aSopenharmony_ci+ } 9461d68314aSopenharmony_ci+ 9471d68314aSopenharmony_ci+ if (!rtnl_tc_get_parent(tc)){ 9481d68314aSopenharmony_ci+ printf("You must specify a parent\n"); 9491d68314aSopenharmony_ci+ goto END; 9501d68314aSopenharmony_ci+ } 9511d68314aSopenharmony_ci+ 9521d68314aSopenharmony_ci+ rtnl_tc_set_kind(tc, kind); 9531d68314aSopenharmony_ci+ if (!(ops = rtnl_tc_get_ops(tc))){ 9541d68314aSopenharmony_ci+ printf("Unknown qdisc \"%s\"\n", kind); 9551d68314aSopenharmony_ci+ goto END; 9561d68314aSopenharmony_ci+ } 9571d68314aSopenharmony_ci+ if (!(tm = nl_cli_tc_lookup(ops))){ 9581d68314aSopenharmony_ci+ nl_cli_fatal(ENOTSUP, "Qdisc type \"%s\" not supported.\n", kind); 9591d68314aSopenharmony_ci+ goto END; 9601d68314aSopenharmony_ci+ } 9611d68314aSopenharmony_ci+ 9621d68314aSopenharmony_ci+ if ((err = rtnl_qdisc_add(sk, qdisc, flags)) < 0){ 9631d68314aSopenharmony_ci+ printf("Unable to add qdisc: %s\n", nl_geterror(err)); 9641d68314aSopenharmony_ci+ goto END; 9651d68314aSopenharmony_ci+ } 9661d68314aSopenharmony_ci+ 9671d68314aSopenharmony_ci+END: 9681d68314aSopenharmony_ci+ nl_cache_mngt_unprovide(link_cache); 9691d68314aSopenharmony_ci+ nl_cache_put(link_cache); 9701d68314aSopenharmony_ci+ rtnl_qdisc_put(qdisc); 9711d68314aSopenharmony_ci+ nl_socket_free(sk); 9721d68314aSopenharmony_ci+ return err; 9731d68314aSopenharmony_ci+} 9741d68314aSopenharmony_ci+ 9751d68314aSopenharmony_ci+int main(int args, char *argv[]) 9761d68314aSopenharmony_ci+{ 9771d68314aSopenharmony_ci+ int err = 0; 9781d68314aSopenharmony_ci+ if ((err = test_add_qdisc()) < 0) { 9791d68314aSopenharmony_ci+ printf("Unable to add qdisc:%s", nl_geterror(err)); 9801d68314aSopenharmony_ci+ } 9811d68314aSopenharmony_ci+ if ((err = test_delete_qdisc()) < 0) { 9821d68314aSopenharmony_ci+ printf("Unable to delete qdisc:%s", nl_geterror(err)); 9831d68314aSopenharmony_ci+ } 9841d68314aSopenharmony_ci+ return err; 9851d68314aSopenharmony_ci+} 9861d68314aSopenharmony_cidiff -urN libnl-3.7.0/tests/test-add-delete-route.c libnl-3.7.0_new/tests/test-add-delete-route.c 9871d68314aSopenharmony_ci--- libnl-3.7.0/tests/test-add-delete-route.c 1970-01-01 08:00:00.000000000 +0800 9881d68314aSopenharmony_ci+++ libnl-3.7.0_new/tests/test-add-delete-route.c 2024-06-03 16:23:13.892190500 +0800 9891d68314aSopenharmony_ci@@ -0,0 +1,43 @@ 9901d68314aSopenharmony_ci+#include <netlink/cli/utils.h> 9911d68314aSopenharmony_ci+#include <netlink/cli/route.h> 9921d68314aSopenharmony_ci+#include <netlink/cli/link.h> 9931d68314aSopenharmony_ci+#include <linux/netlink.h> 9941d68314aSopenharmony_ci+#include <stdio.h> 9951d68314aSopenharmony_ci+#include <params.h> 9961d68314aSopenharmony_ci+ 9971d68314aSopenharmony_ci+ 9981d68314aSopenharmony_ci+int main(int argc, char argv[]) 9991d68314aSopenharmony_ci+{ 10001d68314aSopenharmony_ci+ struct nl_sock *sk; 10011d68314aSopenharmony_ci+ struct rtnl_route *route; 10021d68314aSopenharmony_ci+ struct nl_cache *link_cache, *route_cache; 10031d68314aSopenharmony_ci+ char dst_addr[] = DST_ADDR; 10041d68314aSopenharmony_ci+ char nexthop[] = NEXTHOP; 10051d68314aSopenharmony_ci+ int err = 0; 10061d68314aSopenharmony_ci+ 10071d68314aSopenharmony_ci+ sk = nl_cli_alloc_socket(); 10081d68314aSopenharmony_ci+ nl_cli_connect(sk, NETLINK_ROUTE); 10091d68314aSopenharmony_ci+ link_cache = nl_cli_link_alloc_cache(sk); 10101d68314aSopenharmony_ci+ route_cache = nl_cli_route_alloc_cache(sk, 0); 10111d68314aSopenharmony_ci+ route = nl_cli_route_alloc(); 10121d68314aSopenharmony_ci+ 10131d68314aSopenharmony_ci+ nl_cli_route_parse_dst(route, dst_addr); 10141d68314aSopenharmony_ci+ nl_cli_route_parse_nexthop(route, nexthop, link_cache); 10151d68314aSopenharmony_ci+ 10161d68314aSopenharmony_ci+ if ((err = rtnl_route_add(sk, route, NLM_F_EXCL)) < 0) { 10171d68314aSopenharmony_ci+ printf("Unable to add route: %s", nl_geterror(err)); 10181d68314aSopenharmony_ci+ goto END; 10191d68314aSopenharmony_ci+ } 10201d68314aSopenharmony_ci+ 10211d68314aSopenharmony_ci+ if ((err = rtnl_route_delete(sk, route, NLM_F_EXCL)) < 0) { 10221d68314aSopenharmony_ci+ printf("Unable to delete route: %s", nl_geterror(err)); 10231d68314aSopenharmony_ci+ goto END; 10241d68314aSopenharmony_ci+ } 10251d68314aSopenharmony_ci+ 10261d68314aSopenharmony_ci+END: 10271d68314aSopenharmony_ci+ rtnl_route_put(route); 10281d68314aSopenharmony_ci+ nl_cache_put(link_cache); 10291d68314aSopenharmony_ci+ nl_cache_put(route_cache); 10301d68314aSopenharmony_ci+ nl_socket_free(sk); 10311d68314aSopenharmony_ci+ return err; 10321d68314aSopenharmony_ci+} 10331d68314aSopenharmony_cidiff -urN libnl-3.7.0/tests/test-genl-connect.c libnl-3.7.0_new/tests/test-genl-connect.c 10341d68314aSopenharmony_ci--- libnl-3.7.0/tests/test-genl-connect.c 1970-01-01 08:00:00.000000000 +0800 10351d68314aSopenharmony_ci+++ libnl-3.7.0_new/tests/test-genl-connect.c 2024-06-03 16:23:13.892190500 +0800 10361d68314aSopenharmony_ci@@ -0,0 +1,37 @@ 10371d68314aSopenharmony_ci+#include <linux/genetlink.h> 10381d68314aSopenharmony_ci+#include <netlink/socket.h> 10391d68314aSopenharmony_ci+#include <netlink/cli/utils.h> 10401d68314aSopenharmony_ci+#include <stdio.h> 10411d68314aSopenharmony_ci+ 10421d68314aSopenharmony_ci+ 10431d68314aSopenharmony_ci+int main(int argc, char *argv[]) 10441d68314aSopenharmony_ci+{ 10451d68314aSopenharmony_ci+ struct nl_sock *sk; 10461d68314aSopenharmony_ci+ struct nl_cache *family_cache; 10471d68314aSopenharmony_ci+ struct nl_dump_params params = { 10481d68314aSopenharmony_ci+ .dp_type = NL_DUMP_LINE, 10491d68314aSopenharmony_ci+ .dp_fd = stdout, 10501d68314aSopenharmony_ci+ }; 10511d68314aSopenharmony_ci+ int err = 0; 10521d68314aSopenharmony_ci+ 10531d68314aSopenharmony_ci+ sk = nl_socket_alloc(); 10541d68314aSopenharmony_ci+ if ((err = genl_connect(sk)) < 0) { 10551d68314aSopenharmony_ci+ printf("Unable create socket: %s\n", nl_geterror(err)); 10561d68314aSopenharmony_ci+ goto END; 10571d68314aSopenharmony_ci+ } 10581d68314aSopenharmony_ci+ nl_socket_enable_auto_ack(sk); 10591d68314aSopenharmony_ci+ 10601d68314aSopenharmony_ci+ if (nl_socket_get_fd(sk) < 0) { 10611d68314aSopenharmony_ci+ printf("vaild socket\n"); 10621d68314aSopenharmony_ci+ err = -1; 10631d68314aSopenharmony_ci+ goto END; 10641d68314aSopenharmony_ci+ } 10651d68314aSopenharmony_ci+ nl_socket_set_buffer_size(sk, 32655, 32655); 10661d68314aSopenharmony_ci+ family_cache = nl_cli_alloc_cache(sk, "generic netlink family", genl_ctrl_alloc_cache); 10671d68314aSopenharmony_ci+ nl_cache_dump(family_cache, ¶ms); 10681d68314aSopenharmony_ci+ 10691d68314aSopenharmony_ci+END: 10701d68314aSopenharmony_ci+ nl_socket_free(sk); 10711d68314aSopenharmony_ci+ nl_cache_put(family_cache); 10721d68314aSopenharmony_ci+ return err; 10731d68314aSopenharmony_ci+} 10741d68314aSopenharmony_cidiff -urN libnl-3.7.0/tests/test-link.c libnl-3.7.0_new/tests/test-link.c 10751d68314aSopenharmony_ci--- libnl-3.7.0/tests/test-link.c 1970-01-01 08:00:00.000000000 +0800 10761d68314aSopenharmony_ci+++ libnl-3.7.0_new/tests/test-link.c 2024-06-03 18:34:22.314718700 +0800 10771d68314aSopenharmony_ci@@ -0,0 +1,68 @@ 10781d68314aSopenharmony_ci+#include <netlink/socket.h> 10791d68314aSopenharmony_ci+#include <netlink/netlink.h> 10801d68314aSopenharmony_ci+#include <netlink/cli/utils.h> 10811d68314aSopenharmony_ci+#include <netlink/cli/link.h> 10821d68314aSopenharmony_ci+#include <netlink/route/link.h> 10831d68314aSopenharmony_ci+#include <unistd.h> 10841d68314aSopenharmony_ci+ 10851d68314aSopenharmony_ci+ 10861d68314aSopenharmony_ci+static int self_def_cb = NL_CB_DEBUG; 10871d68314aSopenharmony_ci+ 10881d68314aSopenharmony_ci+ 10891d68314aSopenharmony_ci+int main(int argc, char *argv[]) 10901d68314aSopenharmony_ci+{ 10911d68314aSopenharmony_ci+ struct nl_sock *sk; 10921d68314aSopenharmony_ci+ struct nl_cache *link_cache; 10931d68314aSopenharmony_ci+ struct rtnl_link *link; 10941d68314aSopenharmony_ci+ struct nl_addr *addr; 10951d68314aSopenharmony_ci+ struct nl_cb *cb; 10961d68314aSopenharmony_ci+ int err = 0, ifindex, pid; 10971d68314aSopenharmony_ci+ char *buf; 10981d68314aSopenharmony_ci+ 10991d68314aSopenharmony_ci+ cb = nl_cb_alloc(self_def_cb); 11001d68314aSopenharmony_ci+ pid = getpid(); 11011d68314aSopenharmony_ci+ 11021d68314aSopenharmony_ci+ if (!(sk = nl_socket_alloc_cb(cb))) { 11031d68314aSopenharmony_ci+ nl_cli_fatal(ENOBUFS, "Unable to allocate netlink socket\n"); 11041d68314aSopenharmony_ci+ } 11051d68314aSopenharmony_ci+ nl_cli_connect(sk, NETLINK_ROUTE); 11061d68314aSopenharmony_ci+ nl_socket_disable_seq_check(sk); 11071d68314aSopenharmony_ci+ nl_socket_disable_auto_ack(sk); 11081d68314aSopenharmony_ci+ nl_socket_set_local_port(sk, pid); 11091d68314aSopenharmony_ci+ nl_join_groups(sk, pid); 11101d68314aSopenharmony_ci+ nl_socket_drop_membership(sk, pid); 11111d68314aSopenharmony_ci+ nl_socket_set_peer_port(sk, 0); 11121d68314aSopenharmony_ci+ 11131d68314aSopenharmony_ci+ link_cache = nl_cli_link_alloc_cache(sk); 11141d68314aSopenharmony_ci+ link = nl_cli_link_alloc(); 11151d68314aSopenharmony_ci+ 11161d68314aSopenharmony_ci+ if (err = nl_socket_get_peer_port(sk)){ 11171d68314aSopenharmony_ci+ printf("peer_port %d\n", err); 11181d68314aSopenharmony_ci+ goto END; 11191d68314aSopenharmony_ci+ } 11201d68314aSopenharmony_ci+ if (err = nl_socket_use_seq(sk)) 11211d68314aSopenharmony_ci+ printf("sk->s_seq_next %d\n", err); 11221d68314aSopenharmony_ci+ 11231d68314aSopenharmony_ci+ if ((ifindex = rtnl_link_get_ifindex(link)) == 0){ 11241d68314aSopenharmony_ci+ printf("ifindex is not set, %d\n", ifindex); 11251d68314aSopenharmony_ci+ rtnl_link_set_ifindex(link, 1); 11261d68314aSopenharmony_ci+ }; 11271d68314aSopenharmony_ci+ 11281d68314aSopenharmony_ci+ if (rtnl_link_get(link_cache, 1)){ 11291d68314aSopenharmony_ci+ printf("now link is cached\n"); 11301d68314aSopenharmony_ci+ }else{ 11311d68314aSopenharmony_ci+ nl_cache_add(link_cache, (struct nl_object *)link); 11321d68314aSopenharmony_ci+ }; 11331d68314aSopenharmony_ci+ 11341d68314aSopenharmony_ci+ if ((err = rtnl_link_add(sk, link, AF_INET)) < 0){ 11351d68314aSopenharmony_ci+ printf("Unable to add link %s\n", nl_geterror(err)); 11361d68314aSopenharmony_ci+ goto END; 11371d68314aSopenharmony_ci+ } 11381d68314aSopenharmony_ci+ 11391d68314aSopenharmony_ci+END: 11401d68314aSopenharmony_ci+ nl_cb_put(cb); 11411d68314aSopenharmony_ci+ nl_socket_free(sk); 11421d68314aSopenharmony_ci+ nl_cache_put(link_cache); 11431d68314aSopenharmony_ci+ rtnl_link_put(link); 11441d68314aSopenharmony_ci+ return err; 11451d68314aSopenharmony_ci+} 1146