This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220:在 AP 模式下、内部 DHCP 服务器未发布 DNS 服务器

Guru**** 2579675 points
Other Parts Discussed in Thread: UNIFLASH, CC3220S

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/724557/cc3220-dns-server-not-published-by-internal-dhcp-server-in-ap-mode

器件型号:CC3220

您好!

我尝试在 Uniflash 中配置 AP 模式、以便唯一启用的网络应用程序是 HTTP 和 DHCP (mDNS 和 DNS 关闭)。

此外、我已在网络设置(包括 DNS 服务器)中输入了 IP 地址。

我发现 DNS 服务器不会发送/传送到连接到 DHCP 服务器的客户端。

如果 DNS 应用程序正在运行、则 DNS 服务器地址已正确发送。

请注意、在此示例中、DNS IP 等于网关 IP、但如果使用另一个 DNS IP、则会发生相同的情况。

如何在客户端连接时强制 DHCP 服务器发送 DNS IP? ?

BR、

萨尔瓦托雷

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Salvatore、

    "我发现 DNS 服务器未发送/传送到连接到 DHCP 服务器的客户端。
    如果 DNS 应用程序正在运行、则 DNS 服务器地址已正确发送。"
    您能在此处澄清一下吗? 在应用程序代码中启用 DNS 时 DNS 服务器是否不工作?

    此致、
    Sarah
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sarah、

    让我尝试重新措辞;

    禁用 DNS 服务器时,DHCP 服务器不会发布在网络设置中配置的 DNS 服务器 IP 地址。  

    想象一下您希望将 CC3220设置为 AP 的情况、地址为10.0.0.1、网关10.0.0.2、子网掩码255.255.255.0和 DNS 10.0.0.5 (=>可以是在本地网络中运行的外部 DNS 服务器)。

    在这种情况下、内部 DNS 服务器被禁用。 现在、当客户端连接到我们 AP 中的 DHCP 服务器时、它将获得 IP 地址、它将接收子网掩码、网关、但不接收 DNS 服务器 IP。

    (在 CC3220上启用 DNS 服务器后、DHCP 服务器会将此 DNS IP 发布到客户端以进行连接)

    此致、

    萨尔瓦托雷  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Salvatore、

    我认为我理解您的问题:您希望 CC3220充当 AP、将 DNS 从您的外部 DNS 服务器转发到连接到 CC3220的工作站。 我认为 CC3220不支持此功能。

    对于您的此应用用例、我仍然感到困惑。 CC3220是一款软 AP、因此未连接到互联网。 在这种情况下、外部 DNS 服务器会有什么用途?

    此致、
    Sarah
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sarah、
    我理解您的困惑;也许我没有正确解释。

    让我来解释一下我拥有/需要的用例。
    我希望使用我自己的 DNS 服务器实现(我可以正常工作)、因为我的应用程序的内部实施受到限制太大。
    问题是:
    如果我在 Uniflash 中将 DNS 服务器配置为"已启用"、则无法使用 sl_NetAppStop 关闭它=>不工作(请参阅我的其他文章)
    2.如果我在 Uniflash 中将 DNS 服务器配置为"禁用"、则内部 DNS 服务器不会运行、但内部 DHCP 服务器不会将 Uniflash 中配置的 DNS IP 发布到连接的客户端。

    除非 sl_NetAppStop()得到修复或 DHCP 服务器将配置的 DNS IP 发布到正在连接的客户端,否则我没有看到运行自己的 DHCP 服务器代码的其他选项...

    BR、
    萨尔瓦托雷
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Salvatore、

    遗憾的是、DHCP 未设置为与其他 DNS 服务器实现配合使用。 在这种情况下、您必须实施自己的 DHCP。

    请问您希望在内部 DNS 中使用哪些功能受到限制?

    此致、
    Sarah

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sarah、

    我希望 DHCP 服务器*始终*发布 RFC2132中所述的选项"域名服务器"。

    我的观点是,内部 DHCP 服务器实施似乎可以实现它,但*仅*如果 DNS 服务器在配置时被标记为已启用。
    即使您在网络设置(在 Uniflash 中)中配置了一个也是如此。

    对于内部 DNS 服务器,我无法使用内部 DNS 服务器,因为我会将*每*个*请求解析为固定的 IP 地址。  

    BR、
    萨尔瓦托雷

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Salvatore、

    正确、我们仅在启用设备上的域名服务器时支持此选项。

    您可以在站点模式下使用任何外部 DNS 服务器、并根据 NWP 编程人员指南: http://www.ti.com/lit/swru455的 IPv4地址部分进行设置
    作为 AP、我们无法为 DNS 服务器指定给定的 IP 地址、因为我们的设备不是设计为互联网网关或路由器。 我可以提交内部功能请求进行审核、但这不会是一个快速周转。

    此致、
    Sarah
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sarah、
    感谢您的更新。
    同时、我实施了自己的基本 DNS 和 DHCP 服务器、这完全符合我的目的。
    对于感兴趣的人、我现在可以提供一个很好的自保门户。
    BR、
    萨尔瓦托雷
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    萨尔瓦托、

    我一直在观看此主题、因为我在 AP 模式下遇到 CC3220 DHCP 服务器的可靠性问题、并且正在考虑定制 DHCP。  您是否愿意分享您的 DHCP 实施方案?  我认为这会很好、因为这将使人们能够控制他们的服务器行为、而不是依靠 TI 研发团队。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    当然。 请给我一些时间来清理代码:-)
    还应知道、这是一种非常基本的实现方式。
    我将在几天内将其发布在这里。
    BR、
    萨尔瓦托雷
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Salvatore! 我很高兴您的自定义实施能够为您提供帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Andrew:

    如承诺的那样、请找到随附的一个 zip 文件以及我的自定义 DHCP 服务器实施、该实施使用 TI-RTOS 在 CC3220S 上运行。

    使用 dhcpserver()方法(fyi;我使用8KB 的堆栈以确保正确)启动任务。

    请注意、此实现方案非常基本、功能有限;但它符合我的目的;它允许客户端与受控门户连接、以输入配置信息、供在 STA 模式下使用的 WiFi 网络使用。 (您还需要自定义 DNS;但这真的很容易实现)

    玩得开心、如果发现错误/改进、请告诉我。

    BR、

    萨尔瓦托雷

    e2e.ti.com/.../2437.DHCPServer.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Salvatore、感谢您的分享。 我读了一遍、它看起来相当好。 我将尝试一下、看看它是如何工作的。 为了澄清问题,您是否意味着启动它,您只需创建一个调用 void* dhcpTask(void *pvParameters)的任务即可。 我假设这是您的意思,因为我没有找到 dhcpserver()方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨尔瓦托、

    您从何处获取以下文件? 我在 SDK 中的任何位置都看不到它?

    #include

    我相信您需要它的理由如下:slNetUtil_htonl()
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我不确定它是哪个 SDK 的一部分;SlNetUtils... ?

    无论如何、您可以放心地将其更改为 sl_Htonl (xxx)(我认为是/ti/drivers/net/wifi 的一部分)

    或只是 htonl (xxx);它只是更改字节顺序。

    如果您找不到 SlNetUtil_htonl()实现,并且希望看到它,它将在此处显示:

    //
    //
    //// SlNetUtil_htonl -重新排序主机中32位无符号值的字节
    // Order to network order (Big endian)
    //
    /*********
    uint32_t SlNetUtil_htonl (uint32_t val)
    {
    uint32_t i = 1;
    int8_t * p =(int8_t *)&I;
    
    /*当 I 的 LSB 存储在*p 的最小地址时 *
    if (p[0]=1)/*小端字节序*/
    {
    /*交换值的位置 *
    P[0]=((INT8_t *)&val)[3];
    P[1]=((INT8_t *)&val)[2];
    P[2]=((INT8_t *)&val)[1];
    P[3]=((INT8_t *)&val)[0];
    
    /*返回重新排序的字节 *
    返回 i;
    }
    else /* big endian */
    {
    /*返回输入而不进行任何更改 *
    返回 val;
    }
    }
    

    BR、

    萨尔瓦托雷

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Andrew:

    SDK v1.60中添加了网络实用程序和网络套接字层、部分目的是在 SimpleLink 平台上提供标准 BSD 套接字。 如果您下载最新的 SDK、您应该会在 source/ti/net/中看到此文件。

    此致、
    Sarah
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我明白了。 谢谢你。 我正在尝试将此代码应用到开箱即用演示中。 我创建了一个 DHCP 任务、其中创建了其余任务。 我似乎遇到了错误、我不确定为什么...



    //******** AP DHCP 服务器********* /
    pthread_attr_init (&pAttrs);
    priParam.sched_priority = 3;
    RetVal = pthread_attr_setschedparam (&pAttrs、&priParam);
    RetVal |= pthread_attr_setstacksize (&pAttrs、DHCP_STACK_SIZE);

    if (重定位)

    /*句柄错误*/
    UART_PRINT ("无法配置 DHCPTask 线程参数\n");
    while (1);


    RetVal = pthread_create (&gDHCPThread、&pAttrs、dhcpTask、NULL);

    if (重定位)

    /*句柄错误*/
    UART_PRINT ("无法创建 DHCPTask 线程\n");
    while (1);

    //********* /


    在 dhcp_server.c 中

    void* dhcpTask(void *pvParameters){
    _i16状态;
    _i16服务器;
    SlSockAddrIn_t localAddr;

    initConnectionPool();

    UART_PRINT ("停止内部 DHCP\n\r");
    SL_NetAppStop (SL_NetApp_DHCP_Server_ID);
    UART_PRINT ("正在启动 DHCP\n\r");


    我在 UART 上打印了以下内容:

    正在启动 DHCP
    正在停止内部 DHCP
    DHCP 错误:未创建套接字。 代码:-2018

    这可能意味着器件未启动。  即使我在 initConnectionPool ()之后添加 sl_start (0、0、0),它仍然失败。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨尔瓦托、

    我想我是在尚未调用 sl_start 的位置开始任务的。 不知道原因、但我让它运行、看不到任何错误。 很抱歉。

    但是、我只会看到代码与以前一样远:

    int n = sl_Recvfrom (server、&request.HDR、sizeof (request.HDR)、0、(SlSockAddr_t*)&clientAddr、 (&A);

    即使工作站连接到 CC3220、我也看不到它执行得更远。 我很确定我已经正确配置了这个
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我通过使 Recvfrom ()非绑定并在其上进行软件循环来获得更远的距离。 我总是得到 Recvfrom ()返回0,即使客户端尝试连接也是如此。 我想用 sl_NetAppStop()禁用板载 DHCP 服务器会释放端口67和68。 它的作用几乎就像它们不可用一样。  sl_Recvfrom ()始终返回我不期望的0。

    void* dhcpTask(void *pvParameters){
    _i16状态;
    _i16服务器;
    SlSockAddrIn_t localAddr;
    
    initConnectionPool();
    
    //sl_Start (0、0、0);
    
    //Task_sleep (5000);
    UART_PRINT ("停止内部 DHCP\n\r");
    SL_NetAppStop (SL_NetApp_DHCP_Server_ID);
    UART_PRINT ("正在启动 DHCP\n\r");
    
    while (1){
    
    服务器= SL_Socket (AF_iNet、SOCK_DGRAM、IPPROTO_UDP);
    如果(服务器< 0){
    UART_PRINT ("DHCP 错误:未创建套接字。 代码:%d\r\n"、服务器);
    转到关断;
    }
    
    //实现非阻塞
    SlSockNonBlocking_t BlockingOption;
    BlockingOption.NonBlockingEnabled = 1;
    sl_SetSockOpt (server、sl_SOL_socket、sl_SO_NONBLOCKING、(_u8*)&BlockingOption、sizeof (BlockingOption));
    //实现非阻塞
    
    memset (localAddr、0、sizeof (SlSockAddrIn_t));
    localAddr.Sin_Family = AF_iNet;
    localAddr.Sin_addr.s_addr = sl_Htonl (INADDR_ANY);
    localAddr.Sin_port = sl_Htons (67);
    
    status = sl_Bind(服务器,(slSockAddr_t *)&localAddr,sizeof (slSockAddrIn_t));
    如果(状态< 0){
    UART_PRINT ("DHCP 错误:绑定失败。 代码:%d\r\n"、状态);
    转到关断;
    }
    
    UART_PRINT ("通过 DHCP 初始化获得\n\r\n);
    
    while (1){
    DhcpMessage 请求;
    DhcpMessage 回复;
    SlSockAddrIn_t clientAddr;
    slSocklen_t addrlen = sizeof (clientAddr);
    
    Task_sleep (1000);
    int n = sl_Recvfrom (server、&request.HDR、sizeof (request.HDR)、0、(SlSockAddr_t*)&clientAddr、 (&A);
    
    UART_PRINT ("n =%d\n\r\n"、n);
    
    
    if (n = sl_EAGAAIN || n = 0)
    {
    
    }
    否则、如果(n >= DHCP_HEADER_SIZE + 5){
    
    
    cleanConnectionPool();
    
    if (request.hdr.op!= BOOTREQUEST){
    UART_PRINT ("DHCP 错误:找不到 BOOTREQUEST。\r\n);
    继续;
    }
    uint8_t type =_expandRequest (&request、n);
    如果(type =0){
    UART_PRINT ("DHCP 错误:未找到类型。\r\n");
    继续;
    }
    
    _initReply(&Request, Reply);
    开关(类型){
    案例 DHCP_discover: 类型=_serveDhcpDiscover (&request、&Reply);break;
    案例 DHCP_REQUEST: type =_serveDhcpRequest (&request、&Reply);break;
    案例 DHCP_Decline: type =_serveDhcpDecline (&request、&Reply);break;
    案例 DHCP_RELEASE: type =_serveDhcpRelease (&request、&Reply);break;
    案例 DHCP_INFORM: type =_serveDhcpInform (&request、&Reply);break;
    默认值:UART_PRINT ("DHCP 错误:找到无效的 DHCP 类型。\r\n");类型= 0;中断;
    
    UART_PRINT ("DHCP 类型:%d\n\r\n、类型);
    
    }
    如果(类型!= 0){
    _sendDhcpReply(服务器、&clientAddr、&Reply、类型);
    }
    }否则{
    UART_PRINT ("DHCP 错误:奇怪。 Recvfrom 出错。 代码:%d\r\n"、n);
    转到关断;
    }
    };
    关断:
    //如果发生这种情况几次(errorCount),是否执行完全系统复位?
    //但如果我们继续,请确保“重置”errorCount
    if (server >= 0){
    sl_close (server);
    }
    睡眠(5);
    }
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我不确定您的设置有何不同;请尝试我之前发送的相同代码、但使用以下初始化代码。 我认为 NWP 的设置是不同的、会给您带来麻烦。

    重要说明;请确保在刷写设备时未选中 Uniflash 中的 DHCP (和 DNS)。

    此外、我使用的是最新版本;SDK v2.20... 和最新的 servicepack (v3.8.0.3...)。

    提示:我使用 Wireshark 捕获客户端<->DHCP 服务器之间的数据流量。 能帮助很多人了解实际发送的内容:-)

    //...
    _startNewTask (&gWifiThread、sl_Task、9、wio_stack_size);
    //...
    
    //为了便于阅读,我进行了错误处理,请确保检查每个步骤
    INT8_t 返回值;
    RetVal = sl_Start (0、0、0);
    RetVal = sl_WlanSetMode (Role_AP);
    RetVal = sl_Stop (0);
    RetVal = sl_Start (0、0、0);
    
    wifiConfigure();//参见下面的实现
    //。
    
    void wifiConfigure (void){
    
    UART_PRINT ("[debug]- wifiConfigure\r\n");
    
    //将策略设置为仅自动
    UART_PRINT ("[*]-将策略设置为仅自动\r\n);
    int16_t RetVal = sl_WlanPolicySet (sl_WLAN_policy_connection、sl_WLAN_connection_policy (1、0、0)、NULL、0);
    ASSERT_ON_ERROR (RetVal、WLAN_ERROR);
    
    //禁用自动配置
    UART_PRINT ("[*]-禁用自动配置\r\n);
    RetVal = sl_WlanProvisioning (sl_WLAN_PROVISIONING_CMD_STOP、0xFF、0、NULL、0x0);
    ASSERT_ON_ERROR (RetVal、WLAN_ERROR);
    
    UART_PRINT ("[*]-配置 AP IP 配置\r\n);
    SlNetCfgIpV4Args_t IPv4;
    IPVL.IP =(_u32) sl_IPV4_VAL (10、0、0、1); // IP 地址
    IPVL.IpsMask =(_u32) sl_IPV4_VAL (255、255、255、0);//子网掩码
    IPv4.IpsGateway =(_u32) sl_IPv4_VAL (10、0、0、1);//默认网关地址
    IPv4.IpsServer =(_u32) sl_IPv4_VAL (10、0、0、1);//_u32 DNS 服务器地址
    RetVal = sl_NetCfgSet (sl_netcfg_IPV4_AP_ADDR_MODE、sl_netcfg_ADDR_STATIC、sizeof (slNetCfgIpV4Args_t)、(_u8*)和 IPv4);
    ASSERT_ON_ERROR (RetVal、NetApp_ERROR);
    
    //尝试此操作以“欺骗”内部 DHCP 服务器;不起作用
    UART_PRINT ("[*]-配置第二个 DNS 客户机\r\n");
    SlNetCfgIpV4DnsClientArgs_t DnsOpt;
    DnsOpt.DnsSecondServerAddr = sl_IPv4_VAL (10、0、0、1);
    RetVal = sl_NetCfgSet (sl_netcfg_IPv4_DNS_CLIENT、0、sizeof (SlNetCfgIpV4DnsClientArgs_t)、(unsigned char *)&DnsOpt);
    ASSERT_ON_ERROR (RetVal、NetApp_ERROR);
    
    //启用 DHCP 客户端
    UART_PRINT ("[*]-启用 STA DHCP 客户机\r\n");
    RetVal = sl_NetCfgSet (sl_netcfg_IPv4_STA_ADDR_MODE、sl_netcfg_ADDR_DHCP、0、0);
    ASSERT_ON_ERROR (RetVal、NetApp_ERROR);
    
    //禁用 IPv6
    UART_PRINT ("[*]-禁用 IPv6\r\n);
    const uint32_t IfBitmap =!(sl_netcfg_if_ipv6_STA_local | sl_netcfg_if_ipv6_STA_global);
    RetVal = sl_NetCfgSet (sl_netcfg_if、sl_netcfg_if_State、sizeof (IfBitmap)、(const unsigned char *)&IfBitmap);
    ASSERT_ON_ERROR (RetVal、NetApp_ERROR);
    
    //将扫描参数配置为默认值
    UART_PRINT ("[*]-将扫描参数配置为默认值\r\n);
    const SlWlanScanParamCommand_t ScanDefault ={.ChannelsMask = channelsMask = channel_mask_all、.RssiThreshold = RSSI_th_MAX};
    RetVal = SL_WlanSet (SL_WLAN_CFG_General_Param_ID、SL_WLAN_General_Param_opt_scan_Params、sizeof (ScanDefault)、(uint8_t *)&ScanDefault);
    ASSERT_ON_ERROR (RetVal、WLAN_ERROR);
    
    //禁用扫描
    UART_PRINT ("[*]-禁用扫描\r\n);
    const uint8_t ucConfigOpt = sl_WLAN_SCAN_policy (0、0);
    RetVal = sl_WlanPolicySet (sl_WLAN_policy_scan、ucConfigOpt、NULL、0);
    ASSERT_ON_ERROR (RetVal、WLAN_ERROR);
    
    //将 TX 功率 lvl 设置为 max
    UART_PRINT ("[*]-将 TX 功率 lvl 设置为 max\r\n");
    const uint8_t ucPower = 0;
    RetVal = SL_WlanSet (SL_WLAN_CFG_General_Param_ID、SL_WLAN_General_Param_OPT_STA_TX_POWER、1、(uint8_t *)&ucPower);
    ASSERT_ON_ERROR (RetVal、WLAN_ERROR);
    
    //将 NWP 电源策略设置为“始终打开”=>对于 ARP 数据包来说似乎很重要-在某处在线阅读
    UART_PRINT ("[*]-将 NWP 电源策略设置为"始终打开"\r\n);
    RetVal = sl_WlanPolicySet (sl_WLAN_policy_PM、sl_WLAN_Aways_on_policy、NULL、0);
    ASSERT_ON_ERROR (RetVal、WLAN_ERROR);
    
    //设置新设备名称
    UART_PRINT ("[*]-设置新设备名称\r\n");
    const _u8* const device_name ="myexample";
    RetVal = sl_NetAppSet (sl_NetApp_DEVICE_ID、sl_NetApp_DEVICE_URN、strlen ((const char*) device_name)、(_u8*) device_name);
    ASSERT_ON_ERROR (RetVal、NetApp_ERROR);
    
    //设置新的设备 URL
    UART_PRINT ("[*]-设置新设备 URL\r\n");
    const _u8* const device_URL ="myexample.com";
    RetVal = sl_NetAppSet (sl_NetApp_DEVICE_ID、sl_NetApp_DEVICE_domain、strlen ((const char*) device_URL)、(_u8*) device_URL);
    ASSERT_ON_ERROR (RetVal、NetApp_ERROR);
    
    //取消注册 mDNS 服务
    UART_PRINT ("[*]-取消注册 mDNS 服务\r\n);
    RetVal = sl_NetAppMDNSUnRegisterService (0、0、0);
    ASSERT_ON_ERROR (RetVal、NetApp_ERROR);
    
    //停止 DHCP 服务
    UART_PRINT ("[*]-停止 DHCP 服务\r\n);
    RetVal = sl_NetAppStop (sl_NetApp_DHCP_Server_ID);
    ASSERT_ON_ERROR (RetVal、NetApp_ERROR);
    
    //停止 mDNS 服务
    UART_PRINT ("[*]-停止 mDNS 服务\r\n);
    RetVal = sl_NetAppStop (sl_NetApp_MDNS_ID);
    ASSERT_ON_ERROR (RetVal、NetApp_ERROR);
    
    //停止 DNS 服务-不起作用?!
    UART_PRINT ("[*]-停止 DNS 服务\r\n);
    RetVal = sl_NetAppStop (sl_NetApp_DNS_Server_ID);
    if (RetVal < 0){
    UART_PRINT ("错误:%d\r\n"、RetVal);
    }
    // assert_ON_error (RetVal、netapp_error);
    
    //删除所有64个 RX 过滤器(8*8)
    UART_PRINT ("[*]-删除所有64个 RX 过滤器(8*8)\r\n");
    SlWlanRxFilterOperationCommandBuff_t RxFilterIdMask ={0};
    memset (RxFilterIdMask.FilterBitmap,0xFF,8);
    RetVal = sl_WlanSet (sl_WLAN_RX_FILTERS_ID、sl_WLAN_RX_FILTER_REMOVE、sizeof (SlWlanRxFilterOperationCommandBuff_t)、(uint8_t *)&RxFilterIdMask);
    ASSERT_ON_ERROR (RetVal、WLAN_ERROR);
    
    //为了使更改生效,我们重新启动 NWP
    UART_PRINT ("[*]-为了使更改生效,我们重新启动 NWP\r\n);
    RetVal = sl_Stop (0xFF);
    ASSERT_ON_ERROR (RetVal、DEVICE_ERROR);
    
    RetVal = sl_Start (0、0、0);
    ASSERT_ON_ERROR (RetVal、DEVICE_ERROR);
    
    UART_PRINT ("[*]-完成!\r\n");
    }
    
    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我今晚会尝试一下。 为什么需要关闭 DNS 服务器? 端口53上的端口、不应干扰 DHCP。 或者我是误解了吗?

    我还在使用 Wireshark、但只能看到来自客户端的 DHCP 请求。  CC3220无响应。  现有代码已将其配置为 AP、DHCP、DNS、mDNS 和 DHCP。  我所做的就是禁用 DHCP。  我不明白为什么它不起作用、除非我不理解某些相关性。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使它正常工作。 有一个任务相关性、其中 sl_start 在 recvfrom ()调用之前没有被调用。 DHCP 似乎工作正常、尽管我没有对它进行过多测试。

    我遇到了一个新问题。 如果我启用 DHCP 任务、则板载 HTTP 服务器不工作、并且当设备请求网页时 CPU 锁定。 堆栈大小适合所有任务(DHCP 任务仅使用~2K)。 使用板载 Web 服务器时是否遇到问题? 我觉得这很奇怪。 如果我禁用 DHCP 任务并使用 CC3220 DHCP、一切都正常、网页也正常。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我现在可以使用我的代码了。 我将进行更多测试并报告可靠性。 再次感谢您的分享! 我确实注意到、当我筛选"BOOTP"时、您的 DHCP 消息不会显示在 Wireshark 中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很高兴您能正常工作。 :-)

    1. DNS 服务器不必被禁用;您是正确的;在我的情况下,它必须使用我自己的 DNS 服务器才能使我的强制门户正常工作。

    2.我不知道为什么在 Wireshark 中看不到 DHCP 服务器响应;您是否在 UDP sendto ()方法中使用了多播地址255.255.255.255? 在这里的设置中、我可以看到所有使用 Wireshark 中的 BOOTP 过滤器的响应。

    3.如果您有任何反馈,请告诉我! :-)

    BR、

    萨尔瓦托雷