diff -Nru libkylin-nm-base-4.10.0.0/debian/changelog libkylin-nm-base-4.10.0.0/debian/changelog
--- libkylin-nm-base-4.10.0.0/debian/changelog	2023-10-19 10:35:27.000000000 +0800
+++ libkylin-nm-base-4.10.0.0/debian/changelog	2025-02-28 16:11:44.000000000 +0800
@@ -1,3 +1,9 @@
+libkylin-nm-base (4.10.0.0-ok2) nile; urgency=medium
+
+  * v11代码同源
+
+ -- lixiang1 <lixiang1@kylinos.cn>  Fri, 28 Feb 2025 16:11:44 +0800
+
 libkylin-nm-base (4.10.0.0-ok1) nile; urgency=medium
 
   * BUG号: 
diff -Nru libkylin-nm-base-4.10.0.0/debian/patches/0001-changelog.patch libkylin-nm-base-4.10.0.0/debian/patches/0001-changelog.patch
--- libkylin-nm-base-4.10.0.0/debian/patches/0001-changelog.patch	1970-01-01 08:00:00.000000000 +0800
+++ libkylin-nm-base-4.10.0.0/debian/patches/0001-changelog.patch	2025-02-28 16:11:44.000000000 +0800
@@ -0,0 +1,245 @@
+From: Lixit <lixiang1@kylinos.cn>
+Date: Fri, 28 Feb 2025 16:12:02 +0800
+Subject: changelog
+
+---
+ .../depend/kyenterpricesettinginfo.h               | 20 +++++++++++++
+ .../depend/kylinnetworkresourcemanager.cpp         |  6 ++--
+ .../depend/kynetloadratethread.cpp                 | 10 ++++---
+ .../depend/kywirelessnetresource.cpp               | 35 ++++++++++++++++++++++
+ .../depend/kywirelessnetresource.h                 |  1 +
+ libnm-kylin/libnm-base-kylin/kylinnetworkmanager.h |  1 +
+ .../libnm-base-kylin/kylinnetworkmanger.cpp        |  5 ++++
+ .../kylin-tool/kylinipv4arping.cpp                 |  4 +--
+ .../kylin-tool/kylinipv6arping.cpp                 | 11 +++----
+ 9 files changed, 80 insertions(+), 13 deletions(-)
+
+diff --git a/libnm-kylin/libnm-base-kylin/depend/kyenterpricesettinginfo.h b/libnm-kylin/libnm-base-kylin/depend/kyenterpricesettinginfo.h
+index 01c8b29..05cbbe3 100644
+--- a/libnm-kylin/libnm-base-kylin/depend/kyenterpricesettinginfo.h
++++ b/libnm-kylin/libnm-base-kylin/depend/kyenterpricesettinginfo.h
+@@ -135,6 +135,26 @@ public:
+     }
+ };
+ 
++class KyEapMethodLeapInfo
++{
++public:
++    QString m_userName;
++    QString m_userPwd;
++    NetworkManager::Setting::SecretFlags m_passwdFlag;
++    // only valid when update
++    bool    bChanged;
++
++    inline bool operator == (const KyEapMethodLeapInfo& info) const
++    {
++        if (this->m_userName == info.m_userName
++                && this->m_userPwd == info.m_userPwd
++                && this->m_passwdFlag == info.m_passwdFlag) {
++            return true;
++        } else {
++            return false;
++        }
++    }
++};
+ void assembleEapMethodTlsSettings(NetworkManager::ConnectionSettings::Ptr connSettingPtr, const KyEapMethodTlsInfo &tlsInfo);
+ void assembleEapMethodPeapSettings(NetworkManager::ConnectionSettings::Ptr connSettingPtr, const KyEapMethodPeapInfo &peapInfo);
+ void assembleEapMethodTtlsSettings(NetworkManager::ConnectionSettings::Ptr connSettingPtr, const KyEapMethodTtlsInfo &ttlsInfo);
+diff --git a/libnm-kylin/libnm-base-kylin/depend/kylinnetworkresourcemanager.cpp b/libnm-kylin/libnm-base-kylin/depend/kylinnetworkresourcemanager.cpp
+index 2e2c2c1..9585398 100644
+--- a/libnm-kylin/libnm-base-kylin/depend/kylinnetworkresourcemanager.cpp
++++ b/libnm-kylin/libnm-base-kylin/depend/kylinnetworkresourcemanager.cpp
+@@ -696,9 +696,11 @@ void KyNetworkResourceManager::onActiveConnectionChanged(
+         if (interfaces.size() > 0) {
+             QString ifaceUni = interfaces.at(0);
+             NetworkManager::Device:: Ptr devicePtr = findDeviceByUni(ifaceUni);
+-            deviceName = devicePtr->interfaceName();
++            if (devicePtr != nullptr) {
++                deviceName = devicePtr->interfaceName();
++            }
+         }
+-
++        
+         NetworkManager::Connection::Ptr connectPtr = activeConnect->connection();
+         connectActiveStateChange(connectPtr, deviceName, (KyConnectState)state);
+     } else {
+diff --git a/libnm-kylin/libnm-base-kylin/depend/kynetloadratethread.cpp b/libnm-kylin/libnm-base-kylin/depend/kynetloadratethread.cpp
+index 065ed12..2ee8ebc 100644
+--- a/libnm-kylin/libnm-base-kylin/depend/kynetloadratethread.cpp
++++ b/libnm-kylin/libnm-base-kylin/depend/kynetloadratethread.cpp
+@@ -60,6 +60,7 @@ int KyNetLoadRateThread::getCurrentLoadRate(QString dev, long *saveRate, long *t
+     QByteArray ba = dev.toLatin1(); // must
+     device = ba.data();
+     int counter = 0;
++    unsigned int buffSize=0;
+     char tmpValue[128];
+ 
+     if ((NULL == device) || (NULL == saveRate) || (NULL == txRate)) {
+@@ -81,12 +82,13 @@ int KyNetLoadRateThread::getCurrentLoadRate(QString dev, long *saveRate, long *t
+             // qDebug()<<"No eth0 keyword to find!";
+             continue;
+         } else {
+-            match = match + strlen(device) + strlen(":"); //地址偏移到冒号
++            match = match + qstrnlen(device,1024) + strlen(":"); //地址偏移到冒号
+             sscanf(match, "%ld ", saveRate);
+             memset(tmpValue, 0, sizeof(tmpValue));
+             sscanf(match, "%s ", tmpValue);
+-            match = match + strlen(tmpValue);
+-            for (size_t i = 0; i < strlen(buffer); ++i) {
++            match = match + qstrnlen(tmpValue,128);
++            buffSize=qstrnlen(buffer,1024);
++            for (size_t i = 0; i < buffSize; ++i) {
+                 if (0x20 == *match) {
+                     match++;
+                 } else {
+@@ -95,7 +97,7 @@ int KyNetLoadRateThread::getCurrentLoadRate(QString dev, long *saveRate, long *t
+                     }
+                     memset(tmpValue, 0, sizeof(tmpValue));
+                     sscanf(match, "%s ", tmpValue);
+-                    match = match + strlen(tmpValue);
++                    match = match + qstrnlen(tmpValue,128);
+                     counter++;
+                 }
+             }
+diff --git a/libnm-kylin/libnm-base-kylin/depend/kywirelessnetresource.cpp b/libnm-kylin/libnm-base-kylin/depend/kywirelessnetresource.cpp
+index 055a43e..bc95aaf 100644
+--- a/libnm-kylin/libnm-base-kylin/depend/kywirelessnetresource.cpp
++++ b/libnm-kylin/libnm-base-kylin/depend/kywirelessnetresource.cpp
+@@ -477,6 +477,41 @@ bool KyWirelessNetResource::getEnterPriseInfoTtls(QString &uuid, KyEapMethodTtls
+     return true;
+ }
+ 
++bool KyWirelessNetResource::getEnterPriseInfoLeap(QString &uuid, KyEapMethodLeapInfo &info)
++{
++    NetworkManager::Connection::Ptr conn = m_networkResourceInstance->findConnectByUuid(uuid);
++    if (conn.isNull()) {
++        qDebug()<< LOG_FLAG << "getEnterPriseInfoLeap connection missing";
++        return false;
++    }
++    NetworkManager::WirelessSecuritySetting::Ptr security_sett
++        = conn->settings()->setting(NetworkManager::Setting::WirelessSecurity).dynamicCast<NetworkManager::WirelessSecuritySetting>();
++    if (security_sett.isNull()) {
++        qDebug()<< LOG_FLAG << "don't have WirelessSecurity connection";
++        return false;
++    }
++
++    if (security_sett->keyMgmt() != NetworkManager::WirelessSecuritySetting::WpaEap) {
++        qDebug()<< LOG_FLAG << "keyMgmt not WpaEap " << security_sett->keyMgmt();
++        return false;
++    }
++
++    NetworkManager::Security8021xSetting::Ptr setting =
++            conn->settings()->setting(NetworkManager::Setting::Security8021x).dynamicCast<NetworkManager::Security8021xSetting>();
++    if (setting.isNull() || !setting->eapMethods().contains(NetworkManager::Security8021xSetting::EapMethod::EapMethodLeap)) {
++        qDebug()<< LOG_FLAG << "don't have Security8021x connection";
++        return false;
++    }
++
++    info.m_userName = setting->identity();
++    info.m_passwdFlag = setting->passwordFlags();
++    if (!info.m_passwdFlag) {
++        KyWirelessConnectOperation operation;
++        info.m_userPwd = operation.get8021xPassword(conn->uuid());
++    }
++
++    return true;
++}
+ void KyWirelessNetResource::getWirelessConnectDetail(QString interface, QString ssid, QString uuid, KyDetailInfo &connectSetting)
+ {
+     getBaseInfo(interface, ssid, true, !uuid.isEmpty(), connectSetting);
+diff --git a/libnm-kylin/libnm-base-kylin/depend/kywirelessnetresource.h b/libnm-kylin/libnm-base-kylin/depend/kywirelessnetresource.h
+index 8329b6d..2570810 100644
+--- a/libnm-kylin/libnm-base-kylin/depend/kywirelessnetresource.h
++++ b/libnm-kylin/libnm-base-kylin/depend/kywirelessnetresource.h
+@@ -30,6 +30,7 @@ public:
+     bool getEnterPriseInfoTls(QString &uuid, KyEapMethodTlsInfo &info);
+     bool getEnterPriseInfoPeap(QString &uuid, KyEapMethodPeapInfo &info);
+     bool getEnterPriseInfoTtls(QString &uuid, KyEapMethodTtlsInfo &info);
++    bool getEnterPriseInfoLeap(QString &uuid, KyEapMethodLeapInfo &info);
+ 
+     //获取企业网类型
+     bool getEnterpiseEapMethod(const QString &uuid, KyEapMethodType &type);
+diff --git a/libnm-kylin/libnm-base-kylin/kylinnetworkmanager.h b/libnm-kylin/libnm-base-kylin/kylinnetworkmanager.h
+index fa8870a..7fdde81 100644
+--- a/libnm-kylin/libnm-base-kylin/kylinnetworkmanager.h
++++ b/libnm-kylin/libnm-base-kylin/kylinnetworkmanager.h
+@@ -124,6 +124,7 @@ public:
+     bool getEnterPriseInfoTls(QString &uuid, KyEapMethodTlsInfo &info);
+     bool getEnterPriseInfoPeap(QString &uuid, KyEapMethodPeapInfo &info);
+     bool getEnterPriseInfoTtls(QString &uuid, KyEapMethodTtlsInfo &info);
++    bool getEnterPriseInfoLeap(QString &uuid, KyEapMethodLeapInfo &info);
+ 
+     //获取企业网类型
+     bool getEnterpiseEapMethod(const QString &uuid, KyEapMethodType &type);
+diff --git a/libnm-kylin/libnm-base-kylin/kylinnetworkmanger.cpp b/libnm-kylin/libnm-base-kylin/kylinnetworkmanger.cpp
+index 9377113..f7353ed 100644
+--- a/libnm-kylin/libnm-base-kylin/kylinnetworkmanger.cpp
++++ b/libnm-kylin/libnm-base-kylin/kylinnetworkmanger.cpp
+@@ -210,6 +210,11 @@ bool KyNetworkManager::getEnterPriseInfoTtls(QString &uuid, KyEapMethodTtlsInfo
+     return resource.getEnterPriseInfoTtls(uuid, info);
+ }
+ 
++bool KyNetworkManager::getEnterPriseInfoLeap(QString &uuid, KyEapMethodLeapInfo &info)
++{
++    KyWirelessNetResource resource;
++    return resource.getEnterPriseInfoLeap(uuid, info);
++}
+ //获取企业网类型
+ bool KyNetworkManager::getEnterpiseEapMethod(const QString &uuid, KyEapMethodType &type)
+ {
+diff --git a/libnm-kylin/libnm-external-kylin/kylin-tool/kylinipv4arping.cpp b/libnm-kylin/libnm-external-kylin/kylin-tool/kylinipv4arping.cpp
+index 2592d97..543b427 100644
+--- a/libnm-kylin/libnm-external-kylin/kylin-tool/kylinipv4arping.cpp
++++ b/libnm-kylin/libnm-external-kylin/kylin-tool/kylinipv4arping.cpp
+@@ -56,9 +56,9 @@ void KyIpv4Arping::saveMacAddress(const uint8_t *ptr, size_t len)
+     char macAddress[64] = {0};
+ 
+     for (index = 0; index < len; index++) {
+-        snprintf(&macAddress[strlen(macAddress)], sizeof(macAddress) - strlen(macAddress), "%02X", ptr[index]);
++        snprintf(&macAddress[qstrlen(macAddress)], sizeof(macAddress) - qstrlen(macAddress), "%02X", ptr[index]);
+         if (index != len - 1) {
+-            snprintf(&macAddress[strlen(macAddress)], sizeof(macAddress) - strlen(macAddress), "%s", ":");
++            snprintf(&macAddress[qstrlen(macAddress)], sizeof(macAddress) - qstrlen(macAddress), "%s", ":");
+         }
+     }
+ 
+diff --git a/libnm-kylin/libnm-external-kylin/kylin-tool/kylinipv6arping.cpp b/libnm-kylin/libnm-external-kylin/kylin-tool/kylinipv6arping.cpp
+index 79d2ee1..44c1b3c 100644
+--- a/libnm-kylin/libnm-external-kylin/kylin-tool/kylinipv6arping.cpp
++++ b/libnm-kylin/libnm-external-kylin/kylin-tool/kylinipv6arping.cpp
+@@ -43,11 +43,12 @@ int KyIpv6Arping::getLocalMacAddress(const char *ifname, unsigned char *addr)
+     struct ifreq req;
+     memset (&req, 0, sizeof (req));
+ 
+-    if (((unsigned)strlen (ifname)) >= (unsigned)IFNAMSIZ) {
++    if (((unsigned)qstrlen (ifname)) >= (unsigned)IFNAMSIZ) {
+         return -1; /* buffer overflow = local root */
+     }
+ 
+-    strcpy (req.ifr_name, ifname);
++    strncpy (req.ifr_name, ifname,sizeof(req.ifr_name));
++    req.ifr_name[sizeof(req.ifr_name)-1]=0;
+ 
+     int fd = socket (AF_INET6, SOCK_DGRAM, 0);
+     if (fd == -1) {
+@@ -139,9 +140,9 @@ void KyIpv6Arping::saveMacAddress (const uint8_t *ptr, size_t len)
+     char macAddress[64] = {0};
+ 
+     for (index = 0; index < len; index++) {
+-        snprintf(&macAddress[strlen(macAddress)], sizeof(macAddress) - strlen(macAddress), "%02X", ptr[index]);
++        snprintf(&macAddress[qstrlen(macAddress)], sizeof(macAddress) - qstrlen(macAddress), "%02X", ptr[index]);
+         if (index != len - 1) {
+-            snprintf(&macAddress[strlen(macAddress)], sizeof(macAddress) - strlen(macAddress), "%s", ":");
++            snprintf(&macAddress[qstrlen(macAddress)], sizeof(macAddress) - qstrlen(macAddress), "%s", ":");
+         }
+     }
+ 
+@@ -160,7 +161,7 @@ int KyIpv6Arping::parseIpv6Packet(const uint8_t *buf, size_t len, const struct s
+     if ((len < sizeof (struct nd_neighbor_advert))
+         || (na->nd_na_type != ND_NEIGHBOR_ADVERT)
+         || (na->nd_na_code != 0)
+-        || memcmp (&na->nd_na_target, &tgt->sin6_addr, 16)) {
++        || memcmp(na->nd_na_target.__in6_u.__u6_addr8, tgt->sin6_addr.__in6_u.__u6_addr8, 16)) {
+         return -1;
+     }
+     len -= sizeof (struct nd_neighbor_advert);
diff -Nru libkylin-nm-base-4.10.0.0/debian/patches/series libkylin-nm-base-4.10.0.0/debian/patches/series
--- libkylin-nm-base-4.10.0.0/debian/patches/series	1970-01-01 08:00:00.000000000 +0800
+++ libkylin-nm-base-4.10.0.0/debian/patches/series	2025-02-28 16:11:44.000000000 +0800
@@ -0,0 +1 @@
+0001-changelog.patch