Finished conversion & validation functions;
This commit is contained in:
parent
ed2094bad4
commit
f7a6d0f215
|
@ -66,6 +66,7 @@
|
|||
/* mappings. */
|
||||
/*--------------------------------------------------------------------*/
|
||||
#define P80211ENUM_BAD 0xffffffffUL /* error code for lookups */
|
||||
#define P80211ENUM_BADSTR "P80211ENUM_BAD"
|
||||
#define P80211ENUM_truth_false 0
|
||||
#define P80211ENUM_truth_true 1
|
||||
#define P80211ENUM_powermgmt_active 1
|
||||
|
@ -132,6 +133,13 @@
|
|||
#define MAXLEN_PSTR32 (32) /* pascal array of 32 bytes */
|
||||
#define MAXLEN_PSTR255 (255) /* pascal array of 255 bytes */
|
||||
|
||||
/*--------------------------------------------------------------------*/
|
||||
/* string constants */
|
||||
/*--------------------------------------------------------------------*/
|
||||
|
||||
#define NOT_SET "NOT_SET"
|
||||
#define NOT_SUPPORTED "NOT_SUPPORTED"
|
||||
|
||||
/*====================================================================*/
|
||||
/*----- Macros -------------------------------------------------------*/
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* p80211msg.c: Defines the data and functions for 802.11 mgmt interfaces
|
||||
/* p80211metamsg.c: Defines the data and functions for 802.11 mgmt interfaces
|
||||
* --------------------------------------------------------------------
|
||||
*
|
||||
* Written 1997-99 by Mark Mathews mark@absoval.com
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
* --------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@ -149,15 +150,22 @@ UINT32 p80211item_maxdatalen( UINT32 did )
|
|||
|
||||
|
||||
/*--------------------------------------------------------------------*/
|
||||
/* The following function definitions are for functions that */
|
||||
/* functions that convert MIB items binary represenations to/from */
|
||||
/* their textual representations. */
|
||||
/* The following function definitions are for functions that convert */
|
||||
/* MIB items binary represenations to/from their textual */
|
||||
/* representations. */
|
||||
/* Note: all of these functions assume a valid DID and pointers */
|
||||
/* All textual representations are "<itemname>=<itemvalue>" */
|
||||
/* All itembufs are p80211item_t */
|
||||
/* isvalid functions return: */
|
||||
/* 0 if item is invalid */
|
||||
/* non-zero if item is value */
|
||||
/* */
|
||||
/* NOTE: these functions assume that the argument "itembuf" is a */
|
||||
/* data item and whose data field is always the maximum data */
|
||||
/* size (i.e. a PSTR255) with the exception of a collection. */
|
||||
/* In the case of a collection, the itembuf argument is a */
|
||||
/* pointer to a collection data item where the data value field */
|
||||
/* is itself a list of data items. */
|
||||
/*--------------------------------------------------------------------*/
|
||||
|
||||
/*-- DISPLAYSTR ------------------------------------------------------*/
|
||||
|
@ -171,7 +179,7 @@ void p80211_totext_displaystr( UINT32 did, UINT8 *itembuf, char *textbuf )
|
|||
|
||||
/* collect the C string stored in the data item */
|
||||
pstr = (p80211pstrd_t*)item->data;
|
||||
cstr = pstr->data;
|
||||
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
|
@ -179,8 +187,16 @@ void p80211_totext_displaystr( UINT32 did, UINT8 *itembuf, char *textbuf )
|
|||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
/* now, print to the textbuf */
|
||||
sprintf( textbuf, "%s=%s", meta->name, cstr);
|
||||
if ( item->did != 0UL )
|
||||
{
|
||||
cstr = pstr->data;
|
||||
/* now, print to the textbuf */
|
||||
sprintf( textbuf, "%s=%s", meta->name, cstr);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf( textbuf, "%s=%s", meta->name, NOT_SUPPORTED);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -203,16 +219,32 @@ void p80211_fromtext_displaystr( UINT32 did, UINT8 *itembuf, char *textbuf )
|
|||
|
||||
/* set the DID and length */
|
||||
item->did = did | meta->did; /* OR in the partial DID for safety */
|
||||
item->len = meta->maxlen;
|
||||
|
||||
/* adding 2 to the metadata maxlen takes into account the two bytes in
|
||||
addition to the actual data: the first byte of the data being the
|
||||
length of the data, and the last byte being the '\0' */
|
||||
|
||||
item->len = meta->maxlen + 2;
|
||||
|
||||
/* set the data */
|
||||
/* first the, skip past the item name */
|
||||
|
||||
textbuf = strchr(textbuf, '=');
|
||||
|
||||
if ( textbuf != NULL )
|
||||
{
|
||||
textbuf++; /* OK, got the '=', bump to the next */
|
||||
pstr->len = strlen(textbuf) + 1; /* INCLUDE the '\0' in the pstr */
|
||||
memcpy( pstr->data, textbuf, pstr->len);
|
||||
textbuf++; /* OK, got the '=', bump to the next */
|
||||
if ( strlen(textbuf) < MAXLEN_PSTR255 )
|
||||
{
|
||||
pstr->len = strlen(textbuf) + 1; /* INCLUDE the '\0' in the pstr */
|
||||
memcpy( pstr->data, textbuf, pstr->len);
|
||||
}
|
||||
else /* truncate text string to maximum display string length */
|
||||
{
|
||||
pstr->len = MAXLEN_PSTR255; /* This INCLUDES the '\0' in the pstr */
|
||||
memset( pstr->data, 0, MAXLEN_PSTR255);
|
||||
memcpy( pstr->data, textbuf, (MAXLEN_PSTR255 - 1) );
|
||||
}
|
||||
}
|
||||
else /* bogus text string, set the item to an empty string */
|
||||
{
|
||||
|
@ -239,6 +271,9 @@ UINT32 p80211_isvalid_displaystr( UINT32 did, UINT8 *itembuf )
|
|||
/* set up the pointers */
|
||||
pstr = (p80211pstrd_t*)item->data;
|
||||
|
||||
/* pstr->len includes the '\0' whereas meta->maxlen is just the length
|
||||
of the actual data; if the condition is true, the text string doesn't
|
||||
exceed the maximum allowed length and hence, is valid */
|
||||
if ( (pstr->len - 1) <= meta->maxlen )
|
||||
{
|
||||
result = 1;
|
||||
|
@ -251,70 +286,427 @@ UINT32 p80211_isvalid_displaystr( UINT32 did, UINT8 *itembuf )
|
|||
/* pstr ==> "xx:xx:...." */
|
||||
void p80211_totext_octetstr( UINT32 did, UINT8 *itembuf, char *textbuf )
|
||||
{
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
p80211pstrd_t *pstr;
|
||||
UINT8 *cstr;
|
||||
INT len;
|
||||
INT n;
|
||||
|
||||
/* collect the C string stored in the data item */
|
||||
pstr = (p80211pstrd_t*)item->data;
|
||||
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
if ( item->did != 0UL )
|
||||
{
|
||||
len = pstr->len;
|
||||
cstr = pstr->data;
|
||||
|
||||
sprintf( textbuf, "%s=", meta->name);
|
||||
|
||||
for ( n=0; n < len; n++ )
|
||||
{
|
||||
sprintf( &textbuf[strlen(textbuf)], "%02xu:", (UINT)(cstr[n]) );
|
||||
}
|
||||
|
||||
textbuf[strlen(textbuf)] = '\0'; /* get rid of trailing colon */
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf( textbuf, "%s=%s", meta->name, NOT_SUPPORTED);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* "xx:xx:...." ==> pstr */
|
||||
void p80211_fromtext_octetstr( UINT32 did, UINT8 *itembuf, char *textbuf )
|
||||
{
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
p80211pstrd_t *pstr;
|
||||
UINT hexnum;
|
||||
INT n;
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
/* set up the pointers */
|
||||
pstr = (p80211pstrd_t*)item->data;
|
||||
|
||||
/* set the DID and length */
|
||||
item->did = did | meta->did; /* OR in the partial DID for safety */
|
||||
|
||||
/* set the data */
|
||||
/* first the, skip past the item name */
|
||||
|
||||
textbuf = strchr(textbuf, '=');
|
||||
|
||||
for ( n=0, pstr->len = (UINT8)0; textbuf != NULL; n++ )
|
||||
{
|
||||
textbuf++; /* OK, got the '=', bump to the next */
|
||||
|
||||
if ( sscanf( textbuf, "%x", &hexnum) == 1 )
|
||||
{
|
||||
pstr->data[n] = (UINT8)(hexnum);
|
||||
pstr->len = pstr->len + (UINT8)(1);
|
||||
}
|
||||
|
||||
textbuf = strchr(textbuf, ':');
|
||||
}
|
||||
|
||||
item->len = pstr->len + 1; /* add 1 for the pstr length byte itself */
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* function that checks validity of data item's value */
|
||||
UINT32 p80211_isvalid_octetstr( UINT32 did, UINT8 *itembuf )
|
||||
{
|
||||
UINT32 result = 0;
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
p80211pstrd_t *pstr;
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
/* set up the pointers */
|
||||
pstr = (p80211pstrd_t*)item->data;
|
||||
|
||||
/* in the case of an octet string, the total number of raw data bytes
|
||||
must equal maximum length specified in the metadata */
|
||||
if ( pstr->len == meta->maxlen )
|
||||
{
|
||||
result = 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*-- BOUNDEDINT ------------------------------------------------------*/
|
||||
/* UINT32 ==> %d */
|
||||
void p80211_totext_boundedint( UINT32 did, UINT8 *itembuf, char *textbuf )
|
||||
{
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
char *str;
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
if ( item->did != 0UL )
|
||||
{
|
||||
/* now, print the data item name and value into the textbuf */
|
||||
sprintf( textbuf, "%s=%lu", meta->name, *((UINT32 *)(item->data)));
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf( textbuf, "%s=%s", meta->name, NOT_SUPPORTED);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* %d ==> UINT32 */
|
||||
void p80211_fromtext_boundedint( UINT32 did, UINT8 *itembuf, char *textbuf )
|
||||
{
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
/* set the DID and length */
|
||||
item->did = did | meta->did; /* OR in the partial DID for safety */
|
||||
item->len = sizeof(UINT32);
|
||||
|
||||
/* set the data */
|
||||
/* first the, skip past the item name */
|
||||
|
||||
textbuf = strchr(textbuf, '=');
|
||||
|
||||
if ( textbuf != NULL )
|
||||
{
|
||||
textbuf++; /* OK, got the '=', bump to the next */
|
||||
*((UINT32 *)(item->data)) = atol(textbuf);
|
||||
}
|
||||
else /* bogus text string, set the item data value to zero */
|
||||
{
|
||||
*((UINT32 *)(item->data)) = 0UL;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* function that checks validity of data item's value */
|
||||
UINT32 p80211_isvalid_boundedint( UINT32 did, UINT8 *itembuf )
|
||||
{
|
||||
UINT32 result = 0;
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
/* check to see if the data item's data value is between the min and max
|
||||
values of the metadata for the item, including the min and max values
|
||||
themselves */
|
||||
if ( ((*((UINT32 *)(item->data))) >= meta->min) &&
|
||||
((*((UINT32 *)(item->data))) <= meta->max) )
|
||||
{
|
||||
result = 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*-- INT -------------------------------------------------------------*/
|
||||
/* UINT32 ==> %d */
|
||||
void p80211_totext_int( UINT32 did, UINT8 *itembuf, char *textbuf )
|
||||
{
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
if ( item->did != 0UL )
|
||||
{
|
||||
/* now, print the data item name and value into the textbuf */
|
||||
sprintf( textbuf, "%s=%lu", meta->name, *((UINT32 *)(item->data)));
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf( textbuf, "%s=%s", meta->name, NOT_SUPPORTED);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* %d ==> UINT32 */
|
||||
void p80211_fromtext_int( UINT32 did, UINT8 *itembuf, char *textbuf )
|
||||
{
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
/* set the DID and length */
|
||||
item->did = did | meta->did; /* OR in the partial DID for safety */
|
||||
item->len = sizeof(UINT32);
|
||||
|
||||
/* set the data */
|
||||
/* first the, skip past the item name */
|
||||
|
||||
textbuf = strchr(textbuf, '=');
|
||||
|
||||
if ( textbuf != NULL )
|
||||
{
|
||||
textbuf++; /* OK, got the '=', bump to the next */
|
||||
*((UINT32 *)(item->data)) = atol(textbuf);
|
||||
}
|
||||
else /* bogus text string, set the item data value to zero */
|
||||
{
|
||||
*((UINT32 *)(item->data)) = 0UL;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* function that checks validity of data item's value */
|
||||
UINT32 p80211_isvalid_int( UINT32 did, UINT8 *itembuf )
|
||||
{
|
||||
/* since integers aren't bounded, there's nothing to check */
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*-- ENUMINT ---------------------------------------------------------*/
|
||||
/* UINT32 ==> <valuename> */
|
||||
void p80211_totext_enumint( UINT32 did, UINT8 *itembuf, char *textbuf )
|
||||
{
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
p80211enumpair_t *enumlist = NULL;
|
||||
INT nitems;
|
||||
INT n;
|
||||
INT found;
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
nitems = meta->enumptr->nitems;
|
||||
enumlist = meta->enumptr->list;
|
||||
|
||||
if ( item->did != 0UL )
|
||||
{
|
||||
for ( n=0, found = 0; (!found) && (n < nitems); n++ )
|
||||
{
|
||||
if ( enumlist[n].val == (*((UINT32 *)(item->data))) )
|
||||
{
|
||||
strcpy( textbuf, enumlist->name );
|
||||
found = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !found )
|
||||
{
|
||||
strcpy( textbuf, P80211ENUM_BADSTR );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf( textbuf, "%s=%s", meta->name, NOT_SUPPORTED);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* <valuename> ==> UINT32 */
|
||||
void p80211_fromtext_enumint( UINT32 did, UINT8 *itembuf, char *textbuf )
|
||||
{
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
p80211enumpair_t *enumlist = NULL;
|
||||
INT nitems;
|
||||
INT n;
|
||||
INT found;
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
nitems = meta->enumptr->nitems;
|
||||
enumlist = meta->enumptr->list;
|
||||
|
||||
/* set the DID and the length */
|
||||
item->did = did | meta->did; /* OR in the partial DID for safety */
|
||||
item->len = sizeof(UINT32);
|
||||
|
||||
for ( n=0, found = 0; (!found) && (n < nitems); n++ )
|
||||
{
|
||||
if ( strcmp(enumlist[n].name, textbuf) == 0 )
|
||||
{
|
||||
*((UINT32 *)(item->data)) = enumlist[n].val;
|
||||
found = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !found )
|
||||
{
|
||||
*((UINT32 *)(item->data)) = P80211ENUM_BAD;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* function that checks validity of data item's value */
|
||||
UINT32 p80211_isvalid_enumint( UINT32 did, UINT8 *itembuf )
|
||||
{
|
||||
UINT32 result = 0;
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
if ( (*((UINT32 *)(item->data))) != P80211ENUM_BAD )
|
||||
{
|
||||
result = 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*-- COLLECTION ------------------------------------------------------*/
|
||||
/* UINT32 ==> <valuename> */
|
||||
/* UINT32 ==> <valuename> */
|
||||
/* itembuf is a pointer to a collection data item where the data */
|
||||
/* value portion of the collection data item is a list of data items. */
|
||||
/*--------------------------------------------------------------------*/
|
||||
void p80211_totext_collection( UINT32 did, UINT8 *itembuf, char *textbuf )
|
||||
{
|
||||
p80211meta_t *meta = NULL;
|
||||
p80211itemd_t *item = (p80211itemd_t*)itembuf;
|
||||
p80211itemd_t *currsubitem;
|
||||
p80211meta_t *collmeta = NULL;
|
||||
UINT32 nitems;
|
||||
UINT32 n;
|
||||
UINT32 currdid;
|
||||
char tmpstr[MAXLEN_PSTR255];
|
||||
|
||||
/* collect the metadata item */
|
||||
meta = &(p80211meta_slist
|
||||
[P80211DID_SECTION(did)]
|
||||
[P80211DID_GROUP(did)]
|
||||
[P80211DID_ITEM(did)]);
|
||||
|
||||
collmeta = meta->collptr;
|
||||
nitems = GETMETASIZE(meta->collptr);
|
||||
|
||||
sprintf( textbuf, "%s=", meta->name);
|
||||
|
||||
if (item->did == 0UL)
|
||||
{
|
||||
strcat(textbuf, NOT_SET);
|
||||
strcat(textbuf, "\n");
|
||||
return;
|
||||
}
|
||||
|
||||
strcat(textbuf, "\n\t");
|
||||
|
||||
for ( n=1UL; n < nitems; n++ )
|
||||
{
|
||||
currsubitem = (p80211itemd_t *)(((UINT8 *)(item->data)) + P80211ITEM_GET_OFFSET(collmeta[n].msgoffset));
|
||||
|
||||
sprintf(&textbuf[strlen(textbuf)], "%s=", collmeta[n].name);
|
||||
|
||||
currdid = currsubitem->did;
|
||||
|
||||
if ( (did | (P80211DID_MKINDEX(n))) == currdid )
|
||||
{
|
||||
(*(collmeta[n].totextptr))(currdid, (UINT8 *)currsubitem, &textbuf[strlen(textbuf)]);
|
||||
strcat(textbuf, "\n\t");
|
||||
}
|
||||
else
|
||||
{
|
||||
strcat(textbuf, "unmatched did's\n\t\t");
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* <valuename> ==> UINT32 */
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
|
||||
all : tstmeta
|
||||
all : wlanctl
|
||||
|
||||
SRCS= ../shared/p80211types.c \
|
||||
../shared/p80211metamsg.c \
|
||||
../shared/p80211metamib.c \
|
||||
tstmeta.c
|
||||
wlanctl.c
|
||||
|
||||
tstmeta : ../include/wlan/p80211types.h \
|
||||
wlanctl : ../include/wlan/p80211types.h \
|
||||
../include/wlan/p80211msg.h \
|
||||
$(SRCS)
|
||||
cc -I ../include -D__LINUX_WLAN__ -o tstmeta $(SRCS)
|
||||
cc -I ../include -D__LINUX_WLAN__ -o wlanctl $(SRCS)
|
||||
|
|
Loading…
Reference in a new issue