feat(wlan): DKM wlan driver framework + net connect/disconnect ABI extension
- wlan.drv: multi-vendor PCI probe (class 02:80; Intel AX2xx/Realtek/Atheros ath9k/Broadcom), registers wireless netdev when real hw present (attest net_wlan) - scan/connect/disconnect: strict panic skeletons (NETWL-E10/E11/E12) until native chip backends (ath9k first, no fw blob) or linuxguest backend land - net.h/dkm_shared.h: connect/disconnect appended to dkm_net_api + device_desc (ABI-compatible tail append); net.c dispatch with zero-degrade panic - QEMU (no wlan card): no netdev registered, attest MISSING exempted by FUCK [attest] as designed
This commit is contained in:
@@ -38,6 +38,12 @@ typedef int (*dkm_net_scan_count_fn)(void *ctx);
|
||||
typedef int (*dkm_net_scan_result_fn)(void *ctx, u32 n, dkm_net_scan_result *out);
|
||||
typedef int (*dkm_net_is_wireless_fn)(void *ctx);
|
||||
|
||||
/* 无线关联回调(wlan 驱动填;实施 802.11 认证/关联 + WPA 握手)。
|
||||
* connect: ssid/password 关联请求,返回 0 = 已关联。
|
||||
* disconnect: 解除关联。 */
|
||||
typedef int (*dkm_net_connect_fn)(void *ctx, const char *ssid, const char *password);
|
||||
typedef int (*dkm_net_disconnect_fn)(void *ctx);
|
||||
|
||||
typedef struct dkm_net_device_desc {
|
||||
const char *name;
|
||||
u8 mac[6];
|
||||
@@ -50,6 +56,9 @@ typedef struct dkm_net_device_desc {
|
||||
dkm_net_scan_count_fn scan_count;
|
||||
dkm_net_scan_result_fn scan_result;
|
||||
dkm_net_is_wireless_fn is_wireless;
|
||||
/* 关联扩展(尾部追加,ABI 兼容)。 */
|
||||
dkm_net_connect_fn connect;
|
||||
dkm_net_disconnect_fn disconnect;
|
||||
} dkm_net_device_desc;
|
||||
|
||||
typedef struct dkm_net_device_info {
|
||||
@@ -79,6 +88,9 @@ typedef struct dkm_net_api {
|
||||
int (*scan_count)(u32 index);
|
||||
int (*scan_result)(u32 index, u32 n, dkm_net_scan_result *out);
|
||||
int (*is_wireless)(u32 index);
|
||||
/* 无线关联(dispatch 到 wlan 驱动回调;尾部追加,ABI 兼容)。 */
|
||||
int (*connect)(u32 index, const char *ssid, const char *password);
|
||||
int (*disconnect)(u32 index);
|
||||
/* 网络统计查询(返回 0 成功,-1 索引越界)。 */
|
||||
int (*device_stats)(u32 index, dkm_net_stats *out);
|
||||
} dkm_net_api;
|
||||
|
||||
@@ -102,6 +102,25 @@ static int net_is_wireless_impl(u32 index) {
|
||||
return (dev->flags & DKM_NET_F_WIRELESS) ? 1 : 0;
|
||||
}
|
||||
|
||||
static int net_connect_impl(u32 index, const char *ssid, const char *password) {
|
||||
if (index >= g_net_device_count) return -2;
|
||||
const dkm_net_device_desc *dev = &g_net_devices[index];
|
||||
/* 严格错误策略:无线设备未提供关联回调 = 驱动后端未实现,零降级 panic */
|
||||
if (!dev->connect)
|
||||
panic_full("NET-E20 WLAN CONNECT NOT SUPPORTED",
|
||||
"wireless netdev has no connect backend (native chip driver pending)", 0);
|
||||
return dev->connect(dev->ctx, ssid, password);
|
||||
}
|
||||
|
||||
static int net_disconnect_impl(u32 index) {
|
||||
if (index >= g_net_device_count) return -2;
|
||||
const dkm_net_device_desc *dev = &g_net_devices[index];
|
||||
if (!dev->disconnect)
|
||||
panic_full("NET-E21 WLAN DISCONNECT NOT SUPPORTED",
|
||||
"wireless netdev has no disconnect backend (native chip driver pending)", 0);
|
||||
return dev->disconnect(dev->ctx);
|
||||
}
|
||||
|
||||
/* 统计查询:返回驱动层累计的收发统计。
|
||||
* 严格错误策略插桩:全零统计占位 = 向上层谎报"网卡零流量",
|
||||
* 零降级 panic(NETST-E01)。驱动层统计区接入(driver_ctx 共享统计)
|
||||
@@ -127,6 +146,8 @@ static const dkm_net_api g_net_api = {
|
||||
.scan_count = net_scan_count_impl,
|
||||
.scan_result = net_scan_result_impl,
|
||||
.is_wireless = net_is_wireless_impl,
|
||||
.connect = net_connect_impl,
|
||||
.disconnect = net_disconnect_impl,
|
||||
.device_stats = net_device_stats_impl
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user