Просмотр исходного кода

change: network,原有的network_get_last_register实际含义是获取默认适配器id, 与名称不符, 另外新增2个函数, 真正获取最后注册的适配器, 真正获取默认适配器id

add: socket.dft()增加一个返回值

https://gitee.com/openLuat/LuatOS/issues/ICOWB2
Wendal Chen 6 месяцев назад
Родитель
Сommit
d51973d254

+ 12 - 6
components/network/adapter/luat_lib_socket.c

@@ -48,7 +48,7 @@ end)
 static int l_socket_local_ip(lua_State *L)
 {
 	luat_ip_addr_t local_ip, net_mask, gate_way, ipv6;
-	int adapter_index = luaL_optinteger(L, 1, network_get_last_register_adapter());
+	int adapter_index = luaL_optinteger(L, 1, network_register_get_default());
 	if (adapter_index < 0 || adapter_index >= NW_ADAPTER_QTY)
 	{
 		return 0;
@@ -209,7 +209,7 @@ param3为消息对应的参数,目前只有0和-1,0表示成功或者可能
 */
 static int l_socket_create(lua_State *L)
 {
-	int adapter_index = luaL_optinteger(L, 1, network_get_last_register_adapter());
+	int adapter_index = luaL_optinteger(L, 1, network_register_get_default());
 	if (adapter_index < 0 || adapter_index >= NW_ADAPTER_QTY)
 	{
 		lua_pushnil(L);
@@ -1062,7 +1062,7 @@ static int l_socket_set_dns(lua_State *L)
 {
 #ifdef LUAT_USE_LWIP
 	char ip_buf[68];
-	int adapter_index = luaL_optinteger(L, 1, network_get_last_register_adapter());
+	int adapter_index = luaL_optinteger(L, 1, network_register_get_default());
 	if (adapter_index < 0 || adapter_index >= NW_ADAPTER_QTY)
 	{
 		lua_pushboolean(L, 0);
@@ -1088,7 +1088,7 @@ static int l_socket_set_dns(lua_State *L)
 	    ipaddr_aton(ip_buf, &ip_addr);
 	}
 #else
-	int adapter_index = luaL_optinteger(L, 1, network_get_last_register_adapter());
+	int adapter_index = luaL_optinteger(L, 1, network_register_get_default());
 	if (adapter_index < 0 || adapter_index >= NW_ADAPTER_QTY)
 	{
 		lua_pushboolean(L, 0);
@@ -1266,6 +1266,7 @@ NO_REMOTE_IP:
 @api socket.dft(id)
 @int 默认适配器编号,若不传,则打包获取
 @return int 默认适配器编号
+@return int 最后一个注册的适配器编号(2025.7.25新增)
 @usage
 -- 本函数于 2025.1.6 新增
 -- 获取当前默认适配器编号
@@ -1273,6 +1274,10 @@ local id = socket.dft()
 
 -- 设置默认适配器编号
 socket.dft(socket.LWIP_ETH)
+
+-- 获取当前默认适配器编号, 及最后一个注册的适配器编号
+local id, last_id = socket.dft()
+log.info("当前默认适配器编号", id, "最后一个注册的适配器编号", last_id)
 */
 static int l_socket_default(lua_State *L) {
 	uint8_t id = 0;
@@ -1282,8 +1287,9 @@ static int l_socket_default(lua_State *L) {
 			network_register_set_default(id);
 		}
 	}
-	lua_pushinteger(L, network_get_last_register_adapter());
-	return 1;
+	lua_pushinteger(L, network_register_get_default());
+	lua_pushinteger(L, network_get_last_register_adapter_real());
+	return 2;
 }
 
 #include "rotable2.h"

+ 19 - 0
components/network/adapter/luat_network_adapter.c

@@ -1310,6 +1310,11 @@ int network_get_last_register_adapter(void)
 
 void network_register_set_default(uint8_t adapter_index)
 {
+	int dft = network_register_get_default();
+	if (dft != -1 && dft != adapter_index)
+	{
+		DBG_Printf("change from %d to %d", dft, adapter_index);
+	}
 	prv_network.default_adapter_index = adapter_index;
 }
 
@@ -2803,4 +2808,18 @@ void network_set_ip_ipv4(luat_ip_addr_t *ip, uint32_t ipv4)
 	ip->ipv4 = ipv4;
 #endif
 }
+
+
+int network_get_last_register_adapter_real(void)
+{
+	if (!prv_network.is_init) return -1;
+	return prv_network.last_adapter_index;
+}
+
+int network_register_get_default(void) {
+	if (!prv_network.is_init) return -1;
+	if (prv_network.default_adapter_index != -1) return prv_network.default_adapter_index;
+	return prv_network.last_adapter_index; 
+}
+
 #endif

+ 9 - 0
components/network/adapter/luat_network_adapter.h

@@ -334,6 +334,12 @@ int network_register_adapter(uint8_t adapter_index, network_adapter_info *info,
  */
 void network_register_set_default(uint8_t adapter_index);
 
+/**
+ * 获取默认适配器
+ * @param adapter_index 网卡适配器序号 NW_ADAPTER_INDEX_XXX
+ */
+int network_register_get_default(void);
+
 /**
  * 设置某个网卡适配器的DNS服务器地址
  * @param adapter_index 网卡适配器序号 NW_ADAPTER_INDEX_XXX
@@ -802,5 +808,8 @@ uint8_t network_ip_is_vaild_ipv4(luat_ip_addr_t *ip);
 void network_set_ip_ipv4(luat_ip_addr_t *ip, uint32_t ipv4);
 
 network_adapter_info* network_adapter_fetch(int id, void** userdata);
+
+// 获取真正的最后一个注册的网卡适配器序号, network_get_last_register_adapter用的地方太多了,已经改不了
+int network_get_last_register_adapter_real(void);
 #endif
 // #endif

+ 1 - 1
components/network/errdump/luat_lib_errdump.c

@@ -238,7 +238,7 @@ static int32_t l_errdump_callback(lua_State *L, void* ptr)
     switch(msg->arg1)
     {
     case LUAT_ERRDUMP_CONNECT:
-    	econf.netc = network_alloc_ctrl(network_get_last_register_adapter());
+    	econf.netc = network_alloc_ctrl(network_register_get_default());
     	if (!econf.netc)
     	{
     		LLOGE("no socket, errdump fail, after %d second retry", econf.upload_period);

+ 2 - 2
components/network/httpsrv/src/luat_lib_httpsrv.c

@@ -70,7 +70,7 @@ static int l_httpsrv_start(lua_State *L) {
         LLOGW("httpsrv need callback function!!!");
         return 0;
     }
-    uint8_t adapter_index = luaL_optinteger(L, 3, network_get_last_register_adapter());
+    uint8_t adapter_index = luaL_optinteger(L, 3, network_register_get_default());
     luat_netdrv_t* drv = luat_netdrv_get(adapter_index);
     if (drv == NULL || drv->netif == NULL) {
         LLOGW("该网络还没准备好 %d", adapter_index);
@@ -125,7 +125,7 @@ static int l_httpsrv_start(lua_State *L) {
 */
 static int l_httpsrv_stop(lua_State *L) {
     int port = luaL_checkinteger(L, 1);
-    uint8_t adapter_index = luaL_optinteger(L, 3, network_get_last_register_adapter());
+    uint8_t adapter_index = luaL_optinteger(L, 3, network_register_get_default());
     for (size_t i = 0; i < LUAT_HTTPSRV_COUNT; i++)
     {
         if (srvs[i].port == port && srvs[i].adapter == adapter_index) {

+ 1 - 1
components/network/libemqtt/luat_lib_mqtt.c

@@ -350,7 +350,7 @@ mqttc = mqtt.create(nil,"120.55.137.106", 8883, {
 */
 static int l_mqtt_create(lua_State *L) {
 	int ret = 0;
-	int adapter_index = luaL_optinteger(L, 1, network_get_last_register_adapter());
+	int adapter_index = luaL_optinteger(L, 1, network_register_get_default());
 	if (adapter_index < 0 || adapter_index >= NW_ADAPTER_QTY){
 		LLOGE("尚无已注册的网络适配器");
 		return 0;

+ 1 - 1
components/network/libftp/luat_lib_ftp.c

@@ -64,7 +64,7 @@ static int l_ftp_login(lua_State *L) {
 	int result = 0;
 	size_t len = 0;
 	luat_ftp_tls_t* luat_ftp_tls = NULL;
-	uint8_t adapter = luaL_optinteger(L, 1, network_get_last_register_adapter());
+	uint8_t adapter = luaL_optinteger(L, 1, network_register_get_default());
 	const char *ip_addr = luaL_checklstring(L, 2, &len);
 	uint16_t port = luaL_optinteger(L, 3, 21);
 	const char *username = luaL_optlstring(L, 4, "",&len);

+ 1 - 1
components/network/libhttp/luat_http_client.c

@@ -829,7 +829,7 @@ luat_http_ctrl_t* luat_http_client_create(luat_http_cb cb, void *user_param, int
 	}
 	else
 	{
-		http_ctrl->netc = network_alloc_ctrl(network_get_last_register_adapter());
+		http_ctrl->netc = network_alloc_ctrl(network_register_get_default());
 	}
 	if (!http_ctrl->netc)
 	{

+ 3 - 3
components/network/libhttp/luat_lib_http.c

@@ -145,9 +145,9 @@ static int l_http_request(lua_State *L) {
 	if (lua_istable(L, 5)){
 		lua_pushstring(L, "adapter");
 		if (LUA_TNUMBER == lua_gettable(L, 5)) {
-			adapter_index = luaL_optinteger(L, -1, network_get_last_register_adapter());
+			adapter_index = luaL_optinteger(L, -1, network_register_get_default());
 		}else{
-			adapter_index = network_get_last_register_adapter();
+			adapter_index = network_register_get_default();
 		}
 		lua_pop(L, 1);
 
@@ -217,7 +217,7 @@ static int l_http_request(lua_State *L) {
 			http_ctrl->http_cb_userdata = (void*)luaL_ref(L, LUA_REGISTRYINDEX);
 		}
 	}else{
-		adapter_index = network_get_last_register_adapter();
+		adapter_index = network_register_get_default();
 	}
 #ifdef LUAT_USE_FOTA
 	if (http_ctrl->isfota == 1 && http_ctrl->is_download == 1){

+ 1 - 1
components/network/libsntp/luat_lib_sntp.c

@@ -129,7 +129,7 @@ int l_sntp_get(lua_State *L) {
         LLOGI("sntp is running");
         return 0;
     }
-    int adapter_index = luaL_optinteger(L, 2, network_get_last_register_adapter());
+    int adapter_index = luaL_optinteger(L, 2, network_register_get_default());
     int ret = ntp_get(adapter_index);
     if (ret) {
 #ifdef __LUATOS__

+ 1 - 1
components/network/libsntp/luat_sntp.c

@@ -331,7 +331,7 @@ int32_t luat_sntp_callback(void *data, void *param) {
 
 int ntp_get(int adapter_index){
     if (-1 == adapter_index){
-        adapter_index = network_get_last_register_adapter();
+        adapter_index = network_register_get_default();
     }
 	if (adapter_index < 0 || adapter_index >= NW_ADAPTER_QTY){
 		return -1;

+ 1 - 1
components/network/websocket/luat_lib_websocket.c

@@ -207,7 +207,7 @@ wsc = websocket.create(nil,"wss://air32.cn/abc")
 static int l_websocket_create(lua_State *L)
 {
 	int ret = 0;
-	int adapter_index = luaL_optinteger(L, 1, network_get_last_register_adapter());
+	int adapter_index = luaL_optinteger(L, 1, network_register_get_default());
 	if (adapter_index < 0 || adapter_index >= NW_ADAPTER_QTY)
 	{
 		return 0;