Beispiel #1
0
int cw_in_radio_generic(struct conn *conn, struct cw_action_in *a, uint8_t * data,
			int len, struct sockaddr *from)
{

	const cw_itemdef_t * idef = cw_itemdef_get(conn->actions->radioitems,a->item_id,CW_ITEM_NONE);
	if (!idef){
		cw_log(LOG_ERR,"No definition found for %s",a->item_id);
		return 0;
	}


	int rid = cw_get_byte(data);
	mbag_t radio = mbag_i_get_mbag(conn->radios, rid, NULL);
	if (!radio) {
		if (a->vendor_id != 0
		    || ( (a->vendor_id == 0) && (a->msg_id != CW_MSG_DISCOVERY_REQUEST
			&& a->msg_id != CW_MSG_JOIN_REQUEST) )) {
			cw_dbg(DBG_ELEM_ERR, "Radio not found %d", rid);
			return 0;
		}
		mbag_i_set_mbag(conn->radios,rid,mbag_create());
		radio = mbag_i_get_mbag(conn->radios, rid, NULL);
	}

	int rc = mbag_set_from_buf(radio,idef->type,a->item_id,data+1,len-1);
	if (!rc){
		cw_log(LOG_ERR,
		       "Can't handle item type %s in definition for incomming msg %d (%s) - %d, cw_in_radio_generic.",
		       idef->type->name, a->msg_id, cw_strmsg(a->msg_id), a->elem_id);
	}

	return rc;


}
int cw_in_cisco_add_wlan(struct conn *conn, struct cw_action_in *a, uint8_t * data, int len,
		  struct sockaddr *from)
{

	int rid = cw_get_byte(data);
	mbag_t wlan = mbag_i_get_mbag(conn->radios,rid,NULL);
	if ( !wlan ) {
		printf("No Radio git\n");


	}

	mbag_set_byte(wlan,"radio_id",rid);


	int mytype=mbag_get_byte(conn->config,CW_ITEM_AP_MODE_AND_TYPE,77) & 0xff;

	printf("My type: %d\n",mytype);
	exit(0);

	

	cw_cisco_get_wlan_legacy(wlan,data,len);




	return 0;


}
int cisco80211_in_mac_operation(struct conn *conn, struct cw_action_in *a, uint8_t * data,
		                         int len, struct sockaddr *from)
{
	int rid = cw_get_byte(data);
	mbag_t r = mbag_i_get_mbag(conn->radios,rid,NULL);
	if (!r){
		cw_dbg(DBG_ELEM_ERR,"Radio %d not defined. Can't set mac operation.");
		return 0;
	}

	return cw_read_80211_mac_operation(data+3,r);
}
Beispiel #4
0
static void update_radios(struct conn * conn, mbag_t result)
{
	MAVLITER_DEFINE (it,conn->radios_upd);
	mavliter_foreach(&it){
		struct mbag_item * item = mavliter_get(&it);
		int rid = item->iid;
		mbag_t radio = mbag_i_get_mbag(conn->radios,rid,NULL);
		if (!radio){
			cw_dbg(DBG_ELEM_ERR,"Can't find radio with id %d",rid);
			continue;
		}

		mbag_t iresult = mbag_create();
		mbag_i_set_mbag(result,rid,iresult);		
		update_radio(conn,rid,item->data,radio,iresult);
	}

}
Beispiel #5
0
int cw_radio_set_admin_state(mbag_t radios,int rid, int state, int cause)
{
	mbag_t radio = mbag_i_get_mbag(radios,rid,NULL);
	if (!radio) {
		cw_dbg(DBG_ELEM_ERR,"Can't set radio administrative state for radio %d - radio does't exists",rid);
		return 0;
	}
	mbag_set_byte(radio,CW_RADIO_ADMIN_STATE,state);

	if (cause < 0)
		return 1;


	/* Set operational state for next config update response. */

	mbag_set_word(radio,CW_RADIO_OPER_STATE, (state<<8) | 3);

	return 1;
}
Beispiel #6
0
int cw_in_radio_generic(struct conn *conn, struct cw_action_in *a, uint8_t * data,
                        int len, struct sockaddr *from)
{
    if (!check_len(conn, a, data, len, from))
        return 0;

    int rid = cw_get_byte(data);
    mbag_t radio = mbag_i_get_mbag(conn->radios, rid, NULL);
    if (!radio) {
        if (a->vendor_id != 0
                || ( (a->vendor_id == 0) && (a->msg_id != CW_MSG_DISCOVERY_REQUEST
                                             && a->msg_id != CW_MSG_JOIN_REQUEST) )) {
            cw_dbg(DBG_ELEM_ERR, "Radio not found %d", rid);
            return 0;
        }
        mbag_i_set_mbag(conn->radios,rid,mbag_create());
    }



    return 1;
}
Beispiel #7
0
void conn_clear_upd(struct conn *conn, int merge)
{
	if (merge){
		mavl_merge(conn->config, conn->config_upd);

		MAVLITER_DEFINE (it,conn->radios_upd);

		mavliter_foreach(&it){
			struct mbag_item * ruitem = mavliter_get(&it);
			mavl_t radio_upd = ruitem->data;

			mbag_t radio = mbag_i_get_mbag(conn->radios,ruitem->iid,NULL);
			if (radio){
				mavl_merge(radio,radio_upd);
			}

		}		
		
	}
	mavl_del_all(conn->config_upd);
	mavl_del_all(conn->radios_upd);

}