--- a/bridge/nss_bridge_mgr.c +++ b/bridge/nss_bridge_mgr.c @@ -18,6 +18,7 @@ * nss_bridge_mgr.c * NSS to HLOS Bridge Interface manager */ +#include #include #include #include @@ -1050,7 +1051,11 @@ int nss_bridge_mgr_register_br(struct ne } #endif +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + err = nss_bridge_tx_set_mac_addr_msg(ifnum, (uint8_t *)dev->dev_addr); +#else err = nss_bridge_tx_set_mac_addr_msg(ifnum, dev->dev_addr); +#endif if (err != NSS_TX_SUCCESS) { nss_bridge_mgr_warn("%px: failed to set mac_addr msg, error = %d\n", b_pvt, err); goto fail_3; @@ -1207,7 +1212,12 @@ static int nss_bridge_mgr_changeaddr_eve nss_bridge_mgr_trace("%px: MAC changed to %pM, update NSS\n", b_pvt, dev->dev_addr); - if (nss_bridge_tx_set_mac_addr_msg(b_pvt->ifnum, dev->dev_addr) != NSS_TX_SUCCESS) { +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + if (nss_bridge_tx_set_mac_addr_msg(b_pvt->ifnum, (uint8_t *)dev->dev_addr) != NSS_TX_SUCCESS) +#else + if (nss_bridge_tx_set_mac_addr_msg(b_pvt->ifnum, dev->dev_addr) != NSS_TX_SUCCESS) +#endif + { nss_bridge_mgr_warn("%px: Failed to send change MAC address message to NSS\n", b_pvt); return NOTIFY_BAD; } --- a/dtls/v2.0/nss_dtlsmgr_ctx_dev.c +++ b/dtls/v2.0/nss_dtlsmgr_ctx_dev.c @@ -526,7 +526,11 @@ void nss_dtlsmgr_ctx_dev_setup(struct ne #else dev->priv_destructor = nss_dtlsmgr_ctx_dev_free; #endif +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + memcpy((void *)dev->dev_addr, "\xaa\xbb\xcc\xdd\xee\xff", dev->addr_len); +#else memcpy(dev->dev_addr, "\xaa\xbb\xcc\xdd\xee\xff", dev->addr_len); +#endif memset(dev->broadcast, 0xff, dev->addr_len); memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); } --- a/gre/test/nss_connmgr_gre_test.c +++ b/gre/test/nss_connmgr_gre_test.c @@ -223,7 +223,11 @@ static int nss_connmgr_gre_test_show_pro */ static int nss_connmgr_gre_test_open_proc(struct inode *inode, struct file *filp) { +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + return single_open(filp, nss_connmgr_gre_test_show_proc, pde_data(inode)); +#else return single_open(filp, nss_connmgr_gre_test_show_proc, PDE_DATA(inode)); +#endif } /* --- a/gre/nss_connmgr_gre.c +++ b/gre/nss_connmgr_gre.c @@ -279,10 +279,17 @@ static struct rtnl_link_stats64 *nss_con #else start = u64_stats_fetch_begin_irq(&tstats->syncp); #endif +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + rx_packets = u64_stats_read(&tstats->rx_packets); + tx_packets = u64_stats_read(&tstats->tx_packets); + rx_bytes = u64_stats_read(&tstats->rx_bytes); + tx_bytes = u64_stats_read(&tstats->tx_bytes); +#else rx_packets = tstats->rx_packets; tx_packets = tstats->tx_packets; rx_bytes = tstats->rx_bytes; tx_bytes = tstats->tx_bytes; +#endif #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)) } while (u64_stats_fetch_retry_bh(&tstats->syncp, start)); #else @@ -697,11 +704,21 @@ static void nss_connmgr_gre_event_receiv tstats = this_cpu_ptr(dev->tstats); u64_stats_update_begin(&tstats->syncp); if (interface_type == NSS_DYNAMIC_INTERFACE_TYPE_GRE_INNER) { +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + u64_stats_add(&tstats->tx_packets, stats->tx_packets); + u64_stats_add(&tstats->tx_bytes, stats->tx_bytes); +#else tstats->tx_packets += stats->tx_packets; tstats->tx_bytes += stats->tx_bytes; +#endif } else if (interface_type == NSS_DYNAMIC_INTERFACE_TYPE_GRE_OUTER) { +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + u64_stats_add(&tstats->rx_packets, stats->rx_packets); + u64_stats_add(&tstats->rx_bytes, stats->rx_bytes); +#else tstats->rx_packets += stats->rx_packets; tstats->rx_bytes += stats->rx_bytes; +#endif } u64_stats_update_end(&tstats->syncp); dev->stats.rx_dropped += nss_cmn_rx_dropped_sum(stats); --- a/tunipip6/nss_connmgr_tunipip6.c +++ b/tunipip6/nss_connmgr_tunipip6.c @@ -353,11 +353,21 @@ static void nss_tunipip6_update_dev_stat memset(&stats, 0, sizeof(stats)); if (interface_type == NSS_DYNAMIC_INTERFACE_TYPE_TUNIPIP6_INNER) { +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + u64_stats_set(&stats.tx_packets, sync_stats->node_stats.tx_packets); + u64_stats_set(&stats.tx_bytes, sync_stats->node_stats.tx_bytes); +#else stats.tx_packets = sync_stats->node_stats.tx_packets; stats.tx_bytes = sync_stats->node_stats.tx_bytes; +#endif } else if (interface_type == NSS_DYNAMIC_INTERFACE_TYPE_TUNIPIP6_OUTER) { +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + u64_stats_set(&stats.rx_packets, sync_stats->node_stats.rx_packets); + u64_stats_set(&stats.rx_bytes, sync_stats->node_stats.rx_bytes); +#else stats.rx_packets = sync_stats->node_stats.rx_packets; stats.rx_bytes = sync_stats->node_stats.rx_bytes; +#endif } else { nss_tunipip6_warning("%px: Invalid interface type received from NSS\n", dev); return; --- a/nss_qdisc/igs/nss_mirred.c +++ b/nss_qdisc/igs/nss_mirred.c @@ -317,7 +317,11 @@ static int nss_mirred_act(struct sk_buff * Update the last use of action. */ tcf_lastuse_update(&act->tcf_tm); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + bstats_update(this_cpu_ptr(act->common.cpu_bstats), skb); +#else bstats_cpu_update(this_cpu_ptr(act->common.cpu_bstats), skb); +#endif rcu_read_lock(); retval = READ_ONCE(act->tcf_action); --- a/nss_qdisc/nss_qdisc.h +++ b/nss_qdisc/nss_qdisc.h @@ -188,7 +188,11 @@ struct nss_qdisc { /* Shaper configure callback for reading shaper specific * responses (e.g. memory size). */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + struct gnet_stats_basic_sync bstats; /* Basic class statistics */ +#else struct gnet_stats_basic_packed bstats; /* Basic class statistics */ +#endif struct gnet_stats_queue qstats; /* Qstats for use by classes */ #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)) atomic_t refcnt; /* Reference count for class use */ @@ -444,8 +448,13 @@ extern void nss_qdisc_stop_basic_stats_p * nss_qdisc_gnet_stats_copy_basic() * Wrapper around gnet_stats_copy_basic() */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) +extern int nss_qdisc_gnet_stats_copy_basic(struct Qdisc *sch, + struct gnet_dump *d, struct gnet_stats_basic_sync *b); +#else extern int nss_qdisc_gnet_stats_copy_basic(struct Qdisc *sch, struct gnet_dump *d, struct gnet_stats_basic_packed *b); +#endif /* * nss_qdisc_gnet_stats_copy_queue() --- a/nss_qdisc/igs/nss_ifb.c +++ b/nss_qdisc/igs/nss_ifb.c @@ -544,8 +544,15 @@ static void nss_ifb_update_dev_stats(str * post shaping. Therefore IFB interface's stats should be updated * with NSS firmware's IFB TX stats only. */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + u64_stats_set(&stats.rx_packets, node_stats->tx_packets); + u64_stats_set(&stats.tx_packets, node_stats->tx_packets); + u64_stats_set(&stats.rx_bytes, node_stats->tx_bytes); + u64_stats_set(&stats.tx_bytes, node_stats->tx_bytes); +#else stats.rx_packets = stats.tx_packets = node_stats->tx_packets; stats.rx_bytes = stats.tx_bytes = node_stats->tx_bytes; +#endif dev->stats.rx_dropped = dev->stats.tx_dropped += sync_stats->igs_stats.tx_dropped; u64_stats_update_end(&stats.syncp); --- a/nss_qdisc/nss_qdisc.c +++ b/nss_qdisc/nss_qdisc.c @@ -26,6 +26,9 @@ #include "nss_htb.h" #include "nss_blackhole.h" #include "nss_wred.h" +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) +#include "net/gen_stats.h" +#endif void *nss_qdisc_ctx; /* Shaping context for nss_qdisc */ @@ -2563,7 +2566,11 @@ static void nss_qdisc_basic_stats_callba { struct nss_qdisc *nq = (struct nss_qdisc *)app_data; struct Qdisc *qdisc = nq->qdisc; +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + struct gnet_stats_basic_sync *bstats; +#else struct gnet_stats_basic_packed *bstats; +#endif struct gnet_stats_queue *qstats; struct nss_shaper_node_stats_response *response; #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)) @@ -2602,8 +2609,13 @@ static void nss_qdisc_basic_stats_callba * Update qdisc->bstats */ spin_lock_bh(&nq->lock); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + u64_stats_add(&bstats->bytes, (__u64)response->sn_stats.delta.dequeued_bytes); + u64_stats_add(&bstats->packets, response->sn_stats.delta.dequeued_packets); +#else bstats->bytes += (__u64)response->sn_stats.delta.dequeued_bytes; bstats->packets += response->sn_stats.delta.dequeued_packets; +#endif /* * Update qdisc->qstats @@ -2763,12 +2775,18 @@ void nss_qdisc_stop_basic_stats_polling( * Wrapper around gnet_stats_copy_basic() */ int nss_qdisc_gnet_stats_copy_basic(struct Qdisc *sch, struct gnet_dump *d, +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + struct gnet_stats_basic_sync *b) +#else struct gnet_stats_basic_packed *b) +#endif { #if (LINUX_VERSION_CODE <= KERNEL_VERSION(3, 18, 0)) return gnet_stats_copy_basic(d, b); #elif (LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0)) return gnet_stats_copy_basic(d, NULL, b); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 16, 0)) + return gnet_stats_copy_basic(d, NULL, b, true); #else return gnet_stats_copy_basic(qdisc_root_sleeping_running(sch), d, NULL, b); #endif @@ -2799,7 +2817,9 @@ static int nss_qdisc_if_event_cb(struct struct net_device *br; struct Qdisc *br_qdisc; int if_num, br_num; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 0)) struct nss_qdisc *nq; +#endif dev = nss_qdisc_get_dev(ptr); if (!dev) { @@ -2842,7 +2862,9 @@ static int nss_qdisc_if_event_cb(struct break; } +#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 0)) nq = (struct nss_qdisc *)qdisc_priv(br_qdisc); +#endif /* * Call attach or detach according as per event type. --- a/vlan/nss_vlan_mgr.c +++ b/vlan/nss_vlan_mgr.c @@ -18,6 +18,7 @@ * nss_vlan_mgr.c * NSS to HLOS vlan Interface manager */ +#include #include #include #include @@ -808,7 +809,11 @@ static struct nss_vlan_pvt *nss_vlan_mgr } v->mtu = dev->mtu; +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + ether_addr_copy(v->dev_addr, (uint8_t *)dev->dev_addr); +#else ether_addr_copy(v->dev_addr, dev->dev_addr); +#endif v->ifindex = dev->ifindex; v->refs = 1; @@ -956,14 +961,23 @@ static int nss_vlan_mgr_changeaddr_event } spin_unlock(&vlan_mgr_ctx.lock); - if (nss_vlan_tx_set_mac_addr_msg(v_pvt->nss_if, dev->dev_addr) != NSS_TX_SUCCESS) { +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + if (nss_vlan_tx_set_mac_addr_msg(v_pvt->nss_if, (uint8_t *)dev->dev_addr) != NSS_TX_SUCCESS) +#else + if (nss_vlan_tx_set_mac_addr_msg(v_pvt->nss_if, dev->dev_addr) != NSS_TX_SUCCESS) +#endif + { nss_vlan_mgr_warn("%s: Failed to send change MAC address message to NSS\n", dev->name); nss_vlan_mgr_instance_deref(v_pvt); return NOTIFY_BAD; } spin_lock(&vlan_mgr_ctx.lock); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + ether_addr_copy(v_pvt->dev_addr, (uint8_t *)dev->dev_addr); +#else ether_addr_copy(v_pvt->dev_addr, dev->dev_addr); +#endif spin_unlock(&vlan_mgr_ctx.lock); nss_vlan_mgr_trace("%s: MAC changed to %pM, updated NSS\n", dev->name, dev->dev_addr); nss_vlan_mgr_instance_deref(v_pvt); --- a/vxlanmgr/nss_vxlanmgr_tunnel.c +++ b/vxlanmgr/nss_vxlanmgr_tunnel.c @@ -465,8 +465,13 @@ static void nss_vxlanmgr_tunnel_inner_st tstats = this_cpu_ptr(dev->tstats); u64_stats_update_begin(&tstats->syncp); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + u64_stats_add(&tstats->tx_packets, stats->node_stats.tx_packets); + u64_stats_add(&tstats->tx_bytes, stats->node_stats.tx_bytes); +#else tstats->tx_packets += stats->node_stats.tx_packets; tstats->tx_bytes += stats->node_stats.tx_bytes; +#endif u64_stats_update_end(&tstats->syncp); netdev_stats->tx_dropped += dropped; dev_put(dev); @@ -503,8 +508,13 @@ static void nss_vxlanmgr_tunnel_outer_st tstats = this_cpu_ptr(dev->tstats); u64_stats_update_begin(&tstats->syncp); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + u64_stats_add(&tstats->rx_packets, stats->node_stats.tx_packets); + u64_stats_add(&tstats->rx_bytes, stats->node_stats.tx_bytes); +#else tstats->rx_packets += stats->node_stats.tx_packets; tstats->rx_bytes += stats->node_stats.tx_bytes; +#endif u64_stats_update_end(&tstats->syncp); netdev_stats->rx_dropped += dropped; dev_put(dev); --- a/pvxlanmgr/nss_pvxlanmgr.c +++ b/pvxlanmgr/nss_pvxlanmgr.c @@ -177,7 +177,11 @@ static struct rtnl_link_stats64 *nss_pvx * Netdev seems to be incrementing rx_dropped because we don't give IP header. * So reset it as it's of no use for us. */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + atomic_long_set(&(dev)->stats.__rx_dropped, 0); +#else atomic_long_set(&dev->rx_dropped, 0); +#endif priv = netdev_priv(dev); memset(stats, 0, sizeof(struct rtnl_link_stats64)); memcpy(stats, &priv->stats, sizeof(struct rtnl_link_stats64)); @@ -305,7 +309,11 @@ static void nss_pvxlanmgr_dummy_netdev_s dev->priv_destructor = NULL; #endif +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + memcpy((void *)dev->dev_addr, "\x00\x00\x00\x00\x00\x00", dev->addr_len); +#else memcpy(dev->dev_addr, "\x00\x00\x00\x00\x00\x00", dev->addr_len); +#endif memset(dev->broadcast, 0xff, dev->addr_len); memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); } --- a/clmapmgr/nss_clmapmgr.c +++ b/clmapmgr/nss_clmapmgr.c @@ -102,7 +102,11 @@ void nss_clmapmgr_dev_stats64(struct net * Netdev seems to be incrementing rx_dropped because we don't give IP header. * So reset it as it's of no use for us. */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + atomic_long_set(&(dev)->stats.__rx_dropped, 0); +#else atomic_long_set(&dev->rx_dropped, 0); +#endif priv = netdev_priv(dev); memset(stats, 0, sizeof(struct rtnl_link_stats64)); memcpy(stats, &priv->stats, sizeof(struct rtnl_link_stats64)); --- a/tls/nss_tlsmgr_tun.c +++ b/tls/nss_tlsmgr_tun.c @@ -158,7 +158,11 @@ static void nss_tlsmgr_tun_setup(struct /* * Get the MAC address from the ethernet device */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + eth_random_addr((u8 *) dev->dev_addr); +#else random_ether_addr(dev->dev_addr); +#endif memset(dev->broadcast, 0xff, dev->addr_len); memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); --- a/netlink/nss_nlgre_redir_cmn.c +++ b/netlink/nss_nlgre_redir_cmn.c @@ -384,7 +384,11 @@ static int nss_nlgre_redir_cmn_set_mac_a return -EINVAL; } +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + memcpy((void *) dev->dev_addr, addr->sa_data, ETH_ALEN); +#else memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); +#endif return 0; } --- a/nss_connmgr_tun6rd.c +++ b/nss_connmgr_tun6rd.c @@ -101,10 +101,17 @@ static void nss_tun6rd_update_dev_stats( u64_stats_init(&stats.syncp); u64_stats_update_begin(&stats.syncp); +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + u64_stats_set(&stats.rx_packets, sync_stats->node_stats.rx_packets); + u64_stats_set(&stats.rx_bytes, sync_stats->node_stats.rx_bytes); + u64_stats_set(&stats.tx_packets, sync_stats->node_stats.tx_packets); + u64_stats_set(&stats.tx_bytes, sync_stats->node_stats.tx_bytes); +#else stats.rx_packets = sync_stats->node_stats.rx_packets; stats.rx_bytes = sync_stats->node_stats.rx_bytes; stats.tx_packets = sync_stats->node_stats.tx_packets; stats.tx_bytes = sync_stats->node_stats.tx_bytes; +#endif u64_stats_update_end(&stats.syncp); #else struct nss_tun6rd_stats stats; --- a/ipsecmgr/v1.0/nss_ipsecmgr.c +++ b/ipsecmgr/v1.0/nss_ipsecmgr.c @@ -445,7 +445,11 @@ static void nss_ipsecmgr_tunnel_setup(st /* * get the MAC address from the ethernet device */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + eth_random_addr((u8 *) dev->dev_addr); +#else random_ether_addr(dev->dev_addr); +#endif memset(dev->broadcast, 0xff, dev->addr_len); memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); --- a/ipsecmgr/v2.0/nss_ipsecmgr_tunnel.c +++ b/ipsecmgr/v2.0/nss_ipsecmgr_tunnel.c @@ -394,7 +394,11 @@ static void nss_ipsecmgr_tunnel_setup(st /* * Get the MAC address from the ethernet device */ +#if (LINUX_VERSION_CODE > KERNEL_VERSION(6, 1, 0)) + eth_random_addr((u8 *) dev->dev_addr); +#else random_ether_addr(dev->dev_addr); +#endif memset(dev->broadcast, 0xff, dev->addr_len); memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);