【问题标题】:MbedTLS application on TCPTCP 上的 MbedTLS 应用程序
【发布时间】:2021-11-17 13:25:52
【问题描述】:

我正在尝试在我的 lwip modbus 应用程序上使用 mbedtls 和 stm32f4。我正在使用非 rtos 系统。

我正在使用 lwip-altcp 库。我需要用altcp函数改变我的函数,

这是旧功能:

BOOL
xMBTCPPortInit( USHORT usTCPPort )
{
    struct tcp_pcb *pxPCBListenNew, *pxPCBListenOld;
    BOOL            bOkay = (BOOL)FALSE;
    USHORT          usPort;

    if( usTCPPort == 0 )
    {
        usPort = MB_TCP_DEFAULT_PORT;
    }
    else
    {
        usPort = ( USHORT ) usTCPPort;
    }

    if( ( pxPCBListenNew = pxPCBListenOld = tcp_new(  ) ) == NULL )
    {
        /* Can't create TCP socket. */
        bOkay = (BOOL)FALSE;
    }
    else if( tcp_bind( pxPCBListenNew, IP_ADDR_ANY, ( u16_t ) usPort ) != ERR_OK )
    {
        /* Bind failed - Maybe illegal port value or in use. */
        ( void )tcp_close( pxPCBListenOld );
        bOkay = (BOOL)FALSE;
    }
    else if( ( pxPCBListenNew = tcp_listen( pxPCBListenNew ) ) == NULL )
    {
        ( void )tcp_close( pxPCBListenOld );
        bOkay = (BOOL)FALSE;
    }
    else
    {
        /* Register callback function for new clients. */
        tcp_accept( pxPCBListenNew, prvxMBTCPPortAccept );

        /* Everything okay. Set global variable. */
        pxPCBListen = pxPCBListenNew;

#ifdef MB_TCP_DEBUG
        vMBPortLog( MB_LOG_DEBUG, "MBTCP-ACCEPT", "Protocol stack ready.\r\n" );
#endif
    }
    bOkay = (BOOL)TRUE;
    return bOkay;
}

我正在尝试这样改变:

BOOL
xMBTCPPortInit( USHORT usTCPPort )
{
    struct altcp_pcb *pxPCBListenNew, *pxPCBListenOld;
    BOOL            bOkay = (BOOL)FALSE;
    USHORT          usPort;

    if( usTCPPort == 0 )
    {
        usPort = MB_TCP_DEFAULT_PORT;
    }
    else
    {
        usPort = ( USHORT ) usTCPPort;
    }

    if( ( pxPCBListenNew = pxPCBListenOld = altcp_new( NULL ) ) == NULL )
    {
        /* Can't create TCP socket. */
        bOkay = (BOOL)FALSE;
    }
    else 
      if( altcp_bind( pxPCBListenNew, IP_ADDR_ANY, ( u16_t ) usPort ) != ERR_OK )
    {

        /* Bind failed - Maybe illegal port value or in use. */
        ( void )altcp_close( pxPCBListenOld );
        bOkay = (BOOL)FALSE;
    }
    else if( ( pxPCBListenNew = altcp_listen( pxPCBListenNew ) ) == NULL )
    {

        ( void )altcp_close( pxPCBListenOld );
        bOkay = (BOOL)FALSE;
    }
    else
    {
        /* altcp_tls_new(pxPCBListenNew, IP_GET_TYPE(ip_addr))*/;
        /* Register callback function for new clients. */
        altcp_accept( pxPCBListenNew, prvxMBTCPPortAccept );

        /* Everything okay. Set global variable. */
        pxPCBListen = pxPCBListenNew;

#ifdef MB_TCP_DEBUG
        vMBPortLog( MB_LOG_DEBUG, "MBTCP-ACCEPT", "Protocol stack ready.\r\n" );
#endif
    SerialPrint("MBTCTP-ACCEPT");
    }
        altcp_tls_create_config_client(certfile, certlen);

    bOkay = (BOOL)TRUE;
    return bOkay;
}

我认为我对 altcp_new( NULL ) 函数有误,因为当我对另一个使用 mbedtls-altcp 的示例代码感兴趣时,我看到了这一行 https://github.com/straight-coding/LPC407x-NoOS-LWIP-MBEDTLS-HTTPD-KEIL/blob/f3943f7487a296a16ddff51885c9c8d0ca07562a/LambdaIOT/httpd/http_core.c#L419

他们使用了altcp_tls_new函数,但是这个函数需要altcp_tls_config参数,而我只有tcp pcb参数。如何更改我的 modbus-tcp 连接功能?

struct altcp_pcb *
altcp_tls_new(struct altcp_tls_config *config, u8_t ip_type)
{
  struct altcp_pcb *inner_conn, *ret;
  LWIP_UNUSED_ARG(ip_type);

  inner_conn = altcp_tcp_new_ip_type(ip_type);
  if (inner_conn == NULL) {
    printf("altcp_tls_new inner_conn = nULL\r\n");
    return NULL;
  }
  ret = altcp_tls_wrap(config, inner_conn);
  if (ret == NULL) {
    printf("altcp_tls_new altcp_tls_wrap return null\r\n");
    altcp_close(inner_conn);
  }
  return ret;
}

【问题讨论】:

    标签: ssl stm32 modbus lwip mbedtls


    【解决方案1】:

    要创建 altcp_tls_config 参数,您需要创建 altcp_tls_config 结构的新实例并将其传递给 altcp_tls_new()。

    此链接更详细地解释了它。 https://www.nongnu.org/lwip/2_1_x/group__altcp__api.html

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 1970-01-01
      • 2014-07-09
      • 2012-08-06
      • 2016-09-19
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多