003 File Manager
Current Path:
/usr/src/contrib/wpa/src/ap
usr
/
src
/
contrib
/
wpa
/
src
/
ap
/
📁
..
📄
accounting.c
(14.53 KB)
📄
accounting.h
(1.12 KB)
📄
acs.c
(29.71 KB)
📄
acs.h
(764 B)
📄
airtime_policy.c
(6.82 KB)
📄
airtime_policy.h
(1.27 KB)
📄
ap_config.c
(33.39 KB)
📄
ap_config.h
(26.53 KB)
📄
ap_drv_ops.c
(25.84 KB)
📄
ap_drv_ops.h
(13.38 KB)
📄
ap_list.c
(6.82 KB)
📄
ap_list.h
(1.5 KB)
📄
ap_mlme.c
(5.64 KB)
📄
ap_mlme.h
(1007 B)
📄
authsrv.c
(8.72 KB)
📄
authsrv.h
(352 B)
📄
beacon.c
(40.32 KB)
📄
beacon.h
(1.25 KB)
📄
bss_load.c
(2.4 KB)
📄
bss_load.h
(376 B)
📄
ctrl_iface_ap.c
(24.3 KB)
📄
ctrl_iface_ap.h
(1.61 KB)
📄
dfs.c
(29.35 KB)
📄
dfs.h
(1.22 KB)
📄
dhcp_snoop.c
(3.36 KB)
📄
dhcp_snoop.h
(590 B)
📄
dpp_hostapd.c
(48.28 KB)
📄
dpp_hostapd.h
(1.74 KB)
📄
drv_callbacks.c
(51.68 KB)
📄
eap_user_db.c
(7.92 KB)
📄
eth_p_oui.c
(4.44 KB)
📄
eth_p_oui.h
(958 B)
📄
fils_hlp.c
(16.82 KB)
📄
fils_hlp.h
(547 B)
📄
gas_query_ap.c
(19.53 KB)
📄
gas_query_ap.h
(1.24 KB)
📄
gas_serv.c
(50.48 KB)
📄
gas_serv.h
(3.38 KB)
📄
hostapd.c
(89.58 KB)
📄
hostapd.h
(17.99 KB)
📄
hs20.c
(6.27 KB)
📄
hs20.h
(843 B)
📄
hw_features.c
(24.77 KB)
📄
hw_features.h
(1.93 KB)
📄
iapp.c
(14.59 KB)
📄
iapp.h
(833 B)
📄
ieee802_11.c
(148.71 KB)
📄
ieee802_11.h
(7.97 KB)
📄
ieee802_11_auth.c
(18.3 KB)
📄
ieee802_11_auth.h
(1.04 KB)
📄
ieee802_11_he.c
(8.77 KB)
📄
ieee802_11_ht.c
(16.22 KB)
📄
ieee802_11_shared.c
(23.95 KB)
📄
ieee802_11_vht.c
(13.4 KB)
📄
ieee802_1x.c
(83.16 KB)
📄
ieee802_1x.h
(2.84 KB)
📄
mbo_ap.c
(5.22 KB)
📄
mbo_ap.h
(1.16 KB)
📄
ndisc_snoop.c
(4.3 KB)
📄
ndisc_snoop.h
(838 B)
📄
neighbor_db.c
(6.49 KB)
📄
neighbor_db.h
(940 B)
📄
p2p_hostapd.c
(2.57 KB)
📄
p2p_hostapd.h
(888 B)
📄
pmksa_cache_auth.c
(18.79 KB)
📄
pmksa_cache_auth.h
(2.69 KB)
📄
preauth_auth.c
(6.47 KB)
📄
preauth_auth.h
(1.26 KB)
📄
rrm.c
(17.27 KB)
📄
rrm.h
(1.21 KB)
📄
sta_info.c
(41.42 KB)
📄
sta_info.h
(11.63 KB)
📄
taxonomy.c
(7.45 KB)
📄
taxonomy.h
(766 B)
📄
tkip_countermeasures.c
(2.95 KB)
📄
tkip_countermeasures.h
(451 B)
📄
utils.c
(2.29 KB)
📄
vlan.c
(756 B)
📄
vlan.h
(727 B)
📄
vlan_full.c
(18.35 KB)
📄
vlan_ifconfig.c
(1.47 KB)
📄
vlan_init.c
(5.88 KB)
📄
vlan_init.h
(1.09 KB)
📄
vlan_ioctl.c
(3.75 KB)
📄
vlan_util.c
(3.9 KB)
📄
vlan_util.h
(980 B)
📄
wmm.c
(11.47 KB)
📄
wmm.h
(653 B)
📄
wnm_ap.c
(23.69 KB)
📄
wnm_ap.h
(1.08 KB)
📄
wpa_auth.c
(140.03 KB)
📄
wpa_auth.h
(17.89 KB)
📄
wpa_auth_ft.c
(120.89 KB)
📄
wpa_auth_glue.c
(35.42 KB)
📄
wpa_auth_glue.h
(443 B)
📄
wpa_auth_i.h
(8.47 KB)
📄
wpa_auth_ie.c
(32.38 KB)
📄
wpa_auth_ie.h
(1.14 KB)
📄
wpa_auth_kay.c
(12.26 KB)
📄
wpa_auth_kay.h
(1.15 KB)
📄
wps_hostapd.c
(54.66 KB)
📄
wps_hostapd.h
(2.79 KB)
📄
x_snoop.c
(3.21 KB)
📄
x_snoop.h
(1.29 KB)
Editing: eth_p_oui.c
/* * hostapd / IEEE 802 OUI Extended EtherType 88-B7 * Copyright (c) 2016, Jouni Malinen <j@w1.fi> * * This software may be distributed under the terms of the BSD license. * See README for more details. */ #include "utils/includes.h" #include "utils/common.h" #include "utils/eloop.h" #include "l2_packet/l2_packet.h" #include "hostapd.h" #include "eth_p_oui.h" /* * See IEEE Std 802-2014, Clause 9.2.4 for the definition of the OUI Extended * EtherType 88-B7. This file implements this with OUI 00:13:74 and * vendor-specific subtype 0x0001. */ static const u8 global_oui[] = { 0x00, 0x13, 0x74, 0x00, 0x01 }; struct eth_p_oui_iface { struct dl_list list; char ifname[IFNAMSIZ + 1]; struct l2_packet_data *l2; struct dl_list receiver; }; struct eth_p_oui_ctx { struct dl_list list; struct eth_p_oui_iface *iface; /* all data needed to deliver and unregister */ u8 oui_suffix; /* last byte of OUI */ void (*rx_callback)(void *ctx, const u8 *src_addr, const u8 *dst_addr, u8 oui_suffix, const u8 *buf, size_t len); void *rx_callback_ctx; }; void eth_p_oui_deliver(struct eth_p_oui_ctx *ctx, const u8 *src_addr, const u8 *dst_addr, const u8 *buf, size_t len) { ctx->rx_callback(ctx->rx_callback_ctx, src_addr, dst_addr, ctx->oui_suffix, buf, len); } static void eth_p_rx(void *ctx, const u8 *src_addr, const u8 *buf, size_t len) { struct eth_p_oui_iface *iface = ctx; struct eth_p_oui_ctx *receiver; const struct l2_ethhdr *ethhdr; if (len < sizeof(*ethhdr) + sizeof(global_oui) + 1) { /* too short packet */ return; } ethhdr = (struct l2_ethhdr *) buf; /* trim eth_hdr from buf and len */ buf += sizeof(*ethhdr); len -= sizeof(*ethhdr); /* verify OUI and vendor-specific subtype match */ if (os_memcmp(buf, global_oui, sizeof(global_oui)) != 0) return; buf += sizeof(global_oui); len -= sizeof(global_oui); dl_list_for_each(receiver, &iface->receiver, struct eth_p_oui_ctx, list) { if (buf[0] != receiver->oui_suffix) continue; eth_p_oui_deliver(receiver, ethhdr->h_source, ethhdr->h_dest, buf + 1, len - 1); } } struct eth_p_oui_ctx * eth_p_oui_register(struct hostapd_data *hapd, const char *ifname, u8 oui_suffix, void (*rx_callback)(void *ctx, const u8 *src_addr, const u8 *dst_addr, u8 oui_suffix, const u8 *buf, size_t len), void *rx_callback_ctx) { struct eth_p_oui_iface *iface; struct eth_p_oui_ctx *receiver; int found = 0; struct hapd_interfaces *interfaces; receiver = os_zalloc(sizeof(*receiver)); if (!receiver) goto err; receiver->oui_suffix = oui_suffix; receiver->rx_callback = rx_callback; receiver->rx_callback_ctx = rx_callback_ctx; interfaces = hapd->iface->interfaces; dl_list_for_each(iface, &interfaces->eth_p_oui, struct eth_p_oui_iface, list) { if (os_strcmp(iface->ifname, ifname) != 0) continue; found = 1; break; } if (!found) { iface = os_zalloc(sizeof(*iface)); if (!iface) goto err; os_strlcpy(iface->ifname, ifname, sizeof(iface->ifname)); iface->l2 = l2_packet_init(ifname, NULL, ETH_P_OUI, eth_p_rx, iface, 1); if (!iface->l2) { os_free(iface); goto err; } dl_list_init(&iface->receiver); dl_list_add_tail(&interfaces->eth_p_oui, &iface->list); } dl_list_add_tail(&iface->receiver, &receiver->list); receiver->iface = iface; return receiver; err: os_free(receiver); return NULL; } void eth_p_oui_unregister(struct eth_p_oui_ctx *ctx) { struct eth_p_oui_iface *iface; if (!ctx) return; iface = ctx->iface; dl_list_del(&ctx->list); os_free(ctx); if (dl_list_empty(&iface->receiver)) { dl_list_del(&iface->list); l2_packet_deinit(iface->l2); os_free(iface); } } int eth_p_oui_send(struct eth_p_oui_ctx *ctx, const u8 *src_addr, const u8 *dst_addr, const u8 *buf, size_t len) { struct eth_p_oui_iface *iface = ctx->iface; u8 *packet, *p; size_t packet_len; int ret; struct l2_ethhdr *ethhdr; packet_len = sizeof(*ethhdr) + sizeof(global_oui) + 1 + len; packet = os_zalloc(packet_len); if (!packet) return -1; p = packet; ethhdr = (struct l2_ethhdr *) packet; os_memcpy(ethhdr->h_source, src_addr, ETH_ALEN); os_memcpy(ethhdr->h_dest, dst_addr, ETH_ALEN); ethhdr->h_proto = host_to_be16(ETH_P_OUI); p += sizeof(*ethhdr); os_memcpy(p, global_oui, sizeof(global_oui)); p[sizeof(global_oui)] = ctx->oui_suffix; p += sizeof(global_oui) + 1; os_memcpy(p, buf, len); ret = l2_packet_send(iface->l2, NULL, 0, packet, packet_len); os_free(packet); return ret; }
Upload File
Create Folder