drv_win_eth.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-05-26 xiangxistu first version
  9. */
  10. #include <rtthread.h>
  11. #include <sal_low_lvl.h>
  12. #include <sal_socket.h>
  13. #include <sal_netdb.h>
  14. #include <netdev_ipaddr.h>
  15. #include <netdev.h>
  16. #include "rtt_winsock.h"
  17. static win_netdev_ping(struct netdev* netif, const char* host, size_t data_len,
  18. uint32_t timeout, struct netdev_ping_resp* ping_resp)
  19. {
  20. return 0;
  21. }
  22. const struct netdev_ops win_netdev_ops =
  23. {
  24. RT_NULL,
  25. RT_NULL,
  26. RT_NULL,
  27. RT_NULL,
  28. RT_NULL,
  29. #ifdef RT_USING_FINSH
  30. win_netdev_ping,
  31. RT_NULL,
  32. #endif /* RT_USING_FINSH */
  33. RT_NULL,
  34. };
  35. static const struct sal_socket_ops windows_socket_ops =
  36. {
  37. win_socket,
  38. win_closesocket,
  39. win_bind,
  40. win_listen,
  41. win_connect,
  42. win_accept,
  43. win_sendto,
  44. win_recvfrom,
  45. win_getsockopt,
  46. win_setsockopt,
  47. win_shutdown,
  48. win_getpeername,
  49. win_getsockname,
  50. win_ioctlsocket,
  51. #ifdef SAL_USING_POSIX
  52. inet_poll,
  53. #else
  54. RT_NULL,
  55. #endif
  56. };
  57. static const struct sal_netdb_ops windows_netdb_ops =
  58. {
  59. win_gethostbyname,
  60. RT_NULL,
  61. win_getaddrinfo,
  62. win_freeaddrinfo,
  63. };
  64. static const struct sal_proto_family windows_inet_family =
  65. {
  66. AF_INET,
  67. AF_INET6,
  68. &windows_socket_ops,
  69. &windows_netdb_ops,
  70. };
  71. /* Set lwIP network interface device protocol family information */
  72. int sal_win_netdev_set_pf_info(struct netdev* netdev)
  73. {
  74. RT_ASSERT(netdev);
  75. netdev->sal_user_data = (void*)&windows_inet_family;
  76. return 0;
  77. }
  78. static int win_netdev_add(void)
  79. {
  80. #define ETHERNET_MTU 1500
  81. #define HWADDR_LEN 6
  82. rt_err_t result = RT_EOK;
  83. struct netdev* netdev = RT_NULL;
  84. char name[RT_NAME_MAX] = {0};
  85. netdev = (struct netdev *)rt_calloc(1, sizeof(struct netdev));
  86. if (netdev == RT_NULL)
  87. {
  88. return -RT_EEMPTY;
  89. }
  90. sal_win_netdev_set_pf_info(netdev);
  91. rt_strncpy(name, "win_e0", RT_NAME_MAX);
  92. result = netdev_register(netdev, name, RT_NULL);
  93. netdev->flags = NETDEV_FLAG_UP | NETDEV_FLAG_LINK_UP | NETDEV_FLAG_INTERNET_UP;
  94. netdev->mtu = ETHERNET_MTU;
  95. netdev->ops = &win_netdev_ops;
  96. netdev->hwaddr_len = HWADDR_LEN;
  97. return result;
  98. }
  99. INIT_ENV_EXPORT(win_netdev_add);