source: azure_iot_hub_f767zi/trunk/asp_baseplatform/lwip/contrib-2.1.0/ports/win32/pcapif_helper.c@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 2.6 KB
Line 
1/**
2 * pcapif_helper.c - This file is part of lwIP pcapif and provides helper functions
3 * for managing the link state.
4 */
5
6#include "pcapif_helper.h"
7
8#include <stdlib.h>
9#include <stdio.h>
10
11#include "lwip/arch.h"
12
13#ifdef WIN32
14
15#define WIN32_LEAN_AND_MEAN
16
17#ifdef _MSC_VER
18#pragma warning( push, 3 )
19#endif
20#include <windows.h>
21#include <packet32.h>
22#include <ntddndis.h>
23#ifdef _MSC_VER
24#pragma warning ( pop )
25#endif
26
27struct pcapifh_linkstate {
28 LPADAPTER lpAdapter;
29 PPACKET_OID_DATA ppacket_oid_data;
30};
31
32struct pcapifh_linkstate* pcapifh_linkstate_init(char *adapter_name)
33{
34 struct pcapifh_linkstate* state = (struct pcapifh_linkstate*)malloc(sizeof(struct pcapifh_linkstate));
35 if (state != NULL) {
36 memset(state, 0, sizeof(struct pcapifh_linkstate));
37 state->ppacket_oid_data = (PPACKET_OID_DATA)malloc(sizeof(PACKET_OID_DATA) + sizeof(NDIS_MEDIA_STATE));
38 if (state->ppacket_oid_data == NULL) {
39 free(state);
40 state = NULL;
41 } else {
42 state->lpAdapter = PacketOpenAdapter((char*)adapter_name);
43 if ((state->lpAdapter == NULL) || (state->lpAdapter->hFile == INVALID_HANDLE_VALUE)) {
44 /* failed to open adapter */
45 free(state);
46 state = NULL;
47 }
48 }
49 }
50 return state;
51}
52
53enum pcapifh_link_event pcapifh_linkstate_get(struct pcapifh_linkstate* state)
54{
55 enum pcapifh_link_event ret = PCAPIF_LINKEVENT_UNKNOWN;
56 if (state != NULL) {
57 state->ppacket_oid_data->Oid = OID_GEN_MEDIA_CONNECT_STATUS;
58 state->ppacket_oid_data->Length = sizeof(NDIS_MEDIA_STATE);
59 if (PacketRequest(state->lpAdapter, FALSE, state->ppacket_oid_data)) {
60 NDIS_MEDIA_STATE fNdisMediaState;
61 fNdisMediaState = (*((PNDIS_MEDIA_STATE)(state->ppacket_oid_data->Data)));
62 ret = ((fNdisMediaState == NdisMediaStateConnected) ? PCAPIF_LINKEVENT_UP : PCAPIF_LINKEVENT_DOWN);
63 }
64 }
65 return ret;
66}
67
68void pcapifh_linkstate_close(struct pcapifh_linkstate* state)
69{
70 if (state != NULL) {
71 if (state->lpAdapter != NULL) {
72 PacketCloseAdapter(state->lpAdapter);
73 }
74 if (state->ppacket_oid_data != NULL) {
75 free(state->ppacket_oid_data);
76 }
77 free(state);
78 }
79}
80
81#else /* WIN32 */
82
83/* @todo: add linux/unix implementation? */
84
85struct pcapifh_linkstate {
86 u8_t empty;
87};
88
89struct pcapifh_linkstate* pcapifh_linkstate_init(char *adapter_name)
90{
91 LWIP_UNUSED_ARG(adapter_name);
92 return NULL;
93}
94
95enum pcapifh_link_event pcapifh_linkstate_get(struct pcapifh_linkstate* state)
96{
97 LWIP_UNUSED_ARG(state);
98 return PCAPIF_LINKEVENT_UP;
99}
100void pcapifh_linkstate_close(struct pcapifh_linkstate* state)
101{
102 LWIP_UNUSED_ARG(state);
103}
104
105#endif /* WIN32 */
Note: See TracBrowser for help on using the repository browser.