Developing, testing ..

FossilOrigin-Name: 70133af6d87f896201f359c6a086dc5bab48776d3413c6e4708e8e8061939950
This commit is contained in:
7u83@mail.ru 2014-10-19 10:14:44 +00:00
parent 4cb75d3c1c
commit 3ffd6caf35

View File

@ -9,11 +9,11 @@
#include "capwap/cw_log.h"
#include "capwap/radioinfo.h"
wpa_printf()
int wpa_printf()
{
}
wpa_hexdump()
int wpa_hexdump()
{
}
@ -51,6 +51,16 @@ typedef __le16 le16
struct radioinfo radioinfos[31];
static struct nl_sock * sk;
struct rd {
int phy;
uint32_t idx;
uint8_t mac[6];
};
static struct rd rd;
int interface_up(const char * ifname)
{
@ -192,38 +202,98 @@ nla_put_failure:
static int family_id;
static int add_interface_data(struct nlattr* msgattribs[NL80211_ATTR_MAX+1])
{
printf("Add interface_data\n");
printf("--------------------------------------------------------------------------\n");
int i;
for (i=0; i<NL80211_ATTR_MAX; i++){
if (msgattribs[i]){
printf("Attrib %d, %s\n",i,nlt_get_attrname(i));
}
}
if (msgattribs[NL80211_ATTR_IFINDEX]){
int idx = nla_get_u32( msgattribs[NL80211_ATTR_IFINDEX] );
printf("IF index = %d\n",idx);
rd.idx=idx;
}
if (msgattribs[NL80211_ATTR_MAC]){
uint8_t * d = nla_data( msgattribs[NL80211_ATTR_MAC] );
memcpy (rd.mac,d,6);
}
return 1;
}
static int add_wiphy_data(struct nlattr* msgattribs[NL80211_ATTR_MAX+1])
{
const char * name;
// const char * name;
if (!msgattribs[NL80211_ATTR_WIPHY]){
printf("Error, on index\n");
return 0;
}
int index = nla_get_u32( msgattribs[NL80211_ATTR_WIPHY] );
printf("Index is %d\n",index);
//int index = nla_get_u32( msgattribs[NL80211_ATTR_WIPHY] );
if (msgattribs[NL80211_ATTR_WIPHY_BANDS]){
printf("Yea band\n");
struct nlattr *nla=msgattribs[NL80211_ATTR_WIPHY_BANDS];
struct nla_attr * cnla;
int rem_nla;
// struct nlattr *nla=msgattribs[NL80211_ATTR_WIPHY_BANDS];
// struct nla_attr * cnla;
// int rem_nla;
/* TODO parse bands */
/* nla_for_each_nested(cnla, nla, rem_nla) {
int band = nla_get_u16(cnla);
printf("Band found: %d\n",band);
}
*/
}
if (msgattribs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]){
int tr = nla_get_u32( msgattribs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD] );
printf("Frag threshold: %d\n",tr);
}
if (msgattribs[NL80211_ATTR_SUPPORTED_IFTYPES]){
printf("IFTYPES -.\n");
// struct nlattr *nla=msgattribs[NL80211_ATTR_SUPPORTED_IFTYPES];
// struct nla_attr * cnla;
// int rem_nla;
/* TODO parse bands */
/* nla_for_each_nested(cnla, nla, rem_nla) {
int t = nla_type(cnla);
printf("IFTYPE: %d\n",t);
}
*/
}
int i;
for (i=0; i<NL80211_ATTR_MAX; i++){
@ -260,6 +330,9 @@ static int nlCallback(struct nl_msg *msg, void *arg)
case NL80211_CMD_NEW_WIPHY:
add_wiphy_data(msgattribs);
break;
case NL80211_CMD_NEW_INTERFACE:
add_interface_data(msgattribs);
default:
printf("Default\n");
@ -395,14 +468,14 @@ static int xnlCallback(struct nl_msg *msg, void *arg)
}
void make_if()
int make_if()
{
const char * ifname = "moni";
const char * ifname = "www";
/* allocate a message */
struct nl_msg *msg = nlmsg_alloc();
if (!msg)
return;
return 0;
/* init message */
genlmsg_put(msg, 0, NL_AUTO_SEQ, family_id, 0, 0,
@ -413,11 +486,11 @@ void make_if()
NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, NL80211_IFTYPE_AP);
NLA_PUT_STRING(msg, NL80211_ATTR_IFNAME, ifname);
int rc = nl_send_auto_complete(sk, msg);
nl_send_auto_complete(sk, msg);
int nlr = nl_recvmsgs_default(sk);
printf("NLR = %d\n", nlr);
printf("Make IF NLR = %d\n", nlr);
interface_up(ifname);
@ -440,31 +513,63 @@ void start_ap(struct nl_sock *sk)
/* init message */
genlmsg_put(msg, 0, NL_AUTO_SEQ, family_id, 0, NLM_F_REQUEST,
NL80211_CMD_START_AP, 0);
// genlmsg_put(msg, 0, NL_AUTO_SEQ, family_id, 0, 0,
// NL80211_CMD_SET_BEACON, 0);
struct dot11_mgmt *head = NULL;
head = malloc(256);
uint8_t * tail;
tail = malloc(512);
head->frame_control = htons (DOT11_FTYPE_MGMT | DOT11_STYPE_BEACON) ;
// = IEEE80211_FC(WLAN_FC_TYPE_MGMT,
// WLAN_FC_STYPE_BEACON);
head->duration = htons(0);
/* destination address */
memset(head->da, 0xff, sizeof(head->da));
memcpy (head->sa , rd.mac,6);
memcpy (head->bssid , rd.mac,6);
head->u.beacon.beacon_int=htons(100);
head->u.beacon.capab_info=0;
memset (head->u.beacon.timestamp,0,8);
int hs = sizeof(struct dot11_mgmt_head);
printf("HEAD SIZE: %d\n",hs);
hs += sizeof( head->u.beacon);
printf("Head size is now %d\n",hs);
NLA_PUT(msg, NL80211_ATTR_BEACON_HEAD, hs, head);
tail = head+hs;
uint8_t * pos = tail;
const char *ssid = "HelloWorld";
*pos++ = WLAN_EID_SSID;
*pos++ = strlen(ssid);
memcpy(pos,ssid,strlen(ssid));
pos+=strlen(ssid);
int tl = pos-tail;
printf ("Tail len %d\n",tl);
NLA_PUT(msg, NL80211_ATTR_BEACON_TAIL, tl, tail);
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, 8);
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, rd.idx);
NLA_PUT_U16(msg, NL80211_ATTR_BEACON_INTERVAL, 100);
NLA_PUT_U32(msg, NL80211_ATTR_HIDDEN_SSID, NL80211_HIDDEN_SSID_NOT_IN_USE);
NLA_PUT(msg, NL80211_ATTR_SSID, strlen(ssid), ssid);
// NLA_PUT(msg, NL80211_ATTR_MAC_ADDRESS,6,rd.mac);
NLA_PUT_U32(msg, NL80211_ATTR_DTIM_PERIOD, 1);
NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITES_PAIRWISE, 0);
NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITE_GROUP, 0);
@ -472,12 +577,11 @@ void start_ap(struct nl_sock *sk)
NLA_PUT_U32(msg, NL80211_ATTR_AUTH_TYPE, NL80211_AUTHTYPE_OPEN_SYSTEM);
NLA_PUT_U32(msg, NL80211_ATTR_WPA_VERSIONS, NL80211_WPA_VERSION_2);
NLA_PUT_U32(msg, NL80211_ATTR_WPA_VERSIONS, 0); //NL80211_WPA_VERSION_2);
// NLA_PUT_FLAG(msg, NL80211_ATTR_PRIVACY, 0);
NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, 2412);
const char *ssid = "HelloWorld";
NLA_PUT_U32(msg, NL80211_ATTR_HIDDEN_SSID, NL80211_HIDDEN_SSID_NOT_IN_USE);
NLA_PUT(msg, NL80211_ATTR_SSID, strlen(ssid), ssid);
// nla_put(msg,NL80211_ATTR_SSID,ssid,strlen(ssid));
printf("Sot ssid\n");
@ -488,10 +592,9 @@ void start_ap(struct nl_sock *sk)
int nlr = nl_recvmsgs_default(sk);
printf("Start AP NLR = %d\n", nlr);
/*
msg = nlmsg_alloc();
/* init message */
genlmsg_put(msg, 0, NL_AUTO_SEQ, family_id, 0, NLM_F_REQUEST,
NL80211_CMD_SET_CHANNEL, 0);
@ -505,6 +608,7 @@ void start_ap(struct nl_sock *sk)
printf("Start Channel AP NLR = %d\n", nlr);
*/
@ -589,11 +693,15 @@ void gr()
if (!init())
return;
init_radios();
make_if();
start_ap(sk);
sleep(1000);
return;
return;