From 8f2267bbb90fb52751c3604ade87f353063846c0 Mon Sep 17 00:00:00 2001 From: Sichen Zhao <1473996754@qq.com> Date: Thu, 12 Oct 2017 20:16:07 +0800 Subject: Port wpa supplicant to RTEMS. Add wpa_supplicant lib support and shell command support in RTEMS. --- builder.py | 1 + freebsd/contrib/wpa/src/utils/os_unix.c | 11 +- freebsd/contrib/wpa/wpa_supplicant/config.h | 3 + freebsd/contrib/wpa/wpa_supplicant/main.c | 21 ++ libbsd.py | 286 +++++++++++++++++++++ libbsd_waf.py | 115 ++++++++- rtemsbsd/include/bsp/nexus-devices.h | 2 + rtemsbsd/include/machine/rtems-bsd-commands.h | 2 + .../include/machine/rtems-wpa_supplicant-mutex.h | 41 +++ rtemsbsd/include/rtems/netcmds-config.h | 2 + rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant.c | 36 +++ rtemsbsd/rtems/rtems-wpa_supplicant_mutex.c | 47 ++++ 12 files changed, 562 insertions(+), 5 deletions(-) create mode 100644 rtemsbsd/include/machine/rtems-wpa_supplicant-mutex.h create mode 100644 rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant.c create mode 100644 rtemsbsd/rtems/rtems-wpa_supplicant_mutex.c diff --git a/builder.py b/builder.py index 84ae5f3b..133b7d7d 100755 --- a/builder.py +++ b/builder.py @@ -173,6 +173,7 @@ def includes(): return ['-Irtemsbsd/include', '-Ifreebsd/sys', '-Ifreebsd/sys/contrib/pf', + '-Ifreebsd/crypto', '-Ifreebsd/sys/net', '-Ifreebsd/include', '-Ifreebsd/lib', diff --git a/freebsd/contrib/wpa/src/utils/os_unix.c b/freebsd/contrib/wpa/src/utils/os_unix.c index a3abce4c..7f101d71 100644 --- a/freebsd/contrib/wpa/src/utils/os_unix.c +++ b/freebsd/contrib/wpa/src/utils/os_unix.c @@ -25,6 +25,11 @@ #include #endif /* __MACH__ */ +#ifdef __rtems__ +#include +#endif /* __rtems__ */ + + #include "os.h" #include "common.h" @@ -225,7 +230,7 @@ static int os_daemon(int nochdir, int noclose) int os_daemonize(const char *pid_file) { -#if defined(__uClinux__) || defined(__sun__) +#if defined(__uClinux__) || defined(__sun__) || defined(__rtems__) return -1; #else /* defined(__uClinux__) || defined(__sun__) */ #ifdef __FreeBSD__ @@ -282,6 +287,9 @@ int os_get_random(unsigned char *buf, size_t len) if (TEST_FAIL()) return -1; +#ifdef __rtems__ + return getentropy(buf, len); +#else /* __rtems__ */ f = fopen("/dev/urandom", "rb"); if (f == NULL) { printf("Could not open /dev/urandom.\n"); @@ -292,6 +300,7 @@ int os_get_random(unsigned char *buf, size_t len) fclose(f); return rc != len ? -1 : 0; +#endif /* __rtems__ */ } diff --git a/freebsd/contrib/wpa/wpa_supplicant/config.h b/freebsd/contrib/wpa/wpa_supplicant/config.h index 627f38b6..9de7e704 100644 --- a/freebsd/contrib/wpa/wpa_supplicant/config.h +++ b/freebsd/contrib/wpa/wpa_supplicant/config.h @@ -45,6 +45,9 @@ #include "common/ieee802_11_defs.h" #include "common/ieee802_11_common.h" +#ifdef __rtems__ +#include +#endif /* __rtems__ */ struct wpa_cred { /** diff --git a/freebsd/contrib/wpa/wpa_supplicant/main.c b/freebsd/contrib/wpa/wpa_supplicant/main.c index 0e86b939..40950d2c 100644 --- a/freebsd/contrib/wpa/wpa_supplicant/main.c +++ b/freebsd/contrib/wpa/wpa_supplicant/main.c @@ -19,6 +19,11 @@ #include "driver_i.h" #include "p2p_supplicant.h" +#ifdef __rtems__ +#include +#include +#include +#endif /* __rtems__ */ static void usage(void) { @@ -154,6 +159,22 @@ static void wpa_supplicant_fd_workaround(int start) #endif /* __linux__ */ } +#ifdef __rtems__ +#include + +static int +main(int argc, char **argv); + +int rtems_bsd_command_wpa_supplicant(int argc, char **argv) +{ + int exit_code; + rtems_status_code sc; + + exit_code = rtems_bsd_program_call_main("wpa_supplicant", main, argc, argv); + + return exit_code; +} +#endif /* __rtems__ */ int main(int argc, char *argv[]) { diff --git a/libbsd.py b/libbsd.py index 9bfab369..73155fbc 100644 --- a/libbsd.py +++ b/libbsd.py @@ -3998,6 +3998,291 @@ def usr_sbin_tcpdump(mm): ) return mod +# +# /usr/sbin/wpa_supplicant +# +def usr_sbin_wpa_supplicant(mm): + mod = builder.Module('usr_sbin_wpa_supplicant') + mod.addUserSpaceHeaderFiles( + [ + 'contrib/wpa/wpa_supplicant/ap.h', + 'contrib/wpa/wpa_supplicant/blacklist.h', + 'contrib/wpa/wpa_supplicant/bss.h', + 'contrib/wpa/wpa_supplicant/config.h', + 'contrib/wpa/wpa_supplicant/config_ssid.h', + 'contrib/wpa/wpa_supplicant/ctrl_iface.h', + 'contrib/wpa/wpa_supplicant/driver_i.h', + 'contrib/wpa/wpa_supplicant/gas_query.h', + 'contrib/wpa/wpa_supplicant/hs20_supplicant.h', + 'contrib/wpa/wpa_supplicant/interworking.h', + 'contrib/wpa/wpa_supplicant/mesh.h', + 'contrib/wpa/wpa_supplicant/mesh_mpm.h', + 'contrib/wpa/wpa_supplicant/mesh_rsn.h', + 'contrib/wpa/wpa_supplicant/notify.h', + 'contrib/wpa/wpa_supplicant/offchannel.h', + 'contrib/wpa/wpa_supplicant/scan.h', + 'contrib/wpa/wpa_supplicant/autoscan.h', + 'contrib/wpa/wpa_supplicant/wmm_ac.h', + 'contrib/wpa/wpa_supplicant/wnm_sta.h', + 'contrib/wpa/wpa_supplicant/wpas_glue.h', + 'contrib/wpa/wpa_supplicant/wpas_kay.h', + 'contrib/wpa/wpa_supplicant/wpa_supplicant_i.h', + 'contrib/wpa/wpa_supplicant/wps_supplicant.h', + 'contrib/wpa/wpa_supplicant/ibss_rsn.h', + 'contrib/wpa/wpa_supplicant/p2p_supplicant.h', + 'contrib/wpa/wpa_supplicant/wifi_display.h', + 'contrib/wpa/wpa_supplicant/sme.h', + 'contrib/wpa/wpa_supplicant/bgscan.h', + 'contrib/wpa/wpa_supplicant/dbus/dbus_common.h', + 'contrib/wpa/wpa_supplicant/dbus/dbus_old.h', + 'contrib/wpa/wpa_supplicant/dbus/dbus_new.h', + 'contrib/wpa/src/ap/ap_config.h', + 'contrib/wpa/src/ap/ap_drv_ops.h', + 'contrib/wpa/src/ap/hs20.h', + 'contrib/wpa/src/ap/hostapd.h', + 'contrib/wpa/src/ap/ieee802_11.h', + 'contrib/wpa/src/ap/ieee802_11_auth.h', + 'contrib/wpa/src/ap/p2p_hostapd.h', + 'contrib/wpa/src/ap/sta_info.h', + 'contrib/wpa/src/utils/includes.h', + 'contrib/wpa/src/utils/base64.h', + 'contrib/wpa/src/utils/build_config.h', + 'contrib/wpa/src/utils/common.h', + 'contrib/wpa/src/utils/eloop.h', + 'contrib/wpa/src/utils/ip_addr.h', + 'contrib/wpa/src/utils/list.h', + 'contrib/wpa/src/utils/os.h', + 'contrib/wpa/src/utils/platform.h', + 'contrib/wpa/src/utils/uuid.h', + 'contrib/wpa/src/utils/wpa_debug.h', + 'contrib/wpa/src/utils/wpabuf.h', + 'contrib/wpa/src/utils/trace.h', + 'contrib/wpa/src/utils/pcsc_funcs.h', + 'contrib/wpa/src/utils/ext_password.h', + 'contrib/wpa/src/utils/state_machine.h', + 'contrib/wpa/src/common/gas.h', + 'contrib/wpa/src/common/hw_features_common.h', + 'contrib/wpa/src/common/ieee802_11_common.h', + 'contrib/wpa/src/common/ieee802_11_defs.h', + 'contrib/wpa/src/common/wpa_common.h', + 'contrib/wpa/src/common/defs.h', + 'contrib/wpa/src/common/qca-vendor.h', + 'contrib/wpa/src/common/eapol_common.h', + 'contrib/wpa/src/common/sae.h', + 'contrib/wpa/src/common/wpa_ctrl.h', + 'contrib/wpa/src/common/version.h', + 'contrib/wpa/src/drivers/driver.h', + 'contrib/wpa/src/drivers/driver_ndis.h', + 'contrib/wpa/src/drivers/driver_nl80211.h', + 'contrib/wpa/src/drivers/linux_defines.h', + 'contrib/wpa/src/wps/http.h', + 'contrib/wpa/src/wps/http_client.h', + 'contrib/wpa/src/wps/http_server.h', + 'contrib/wpa/src/wps/httpread.h', + 'contrib/wpa/src/wps/wps.h', + 'contrib/wpa/src/wps/wps_i.h', + 'contrib/wpa/src/wps/wps_defs.h', + 'contrib/wpa/src/wps/upnp_xml.h', + 'contrib/wpa/src/wps/wps_attr_parse.h', + 'contrib/wpa/src/wps/wps_dev_attr.h', + 'contrib/wpa/src/wps/wps_er.h', + 'contrib/wpa/src/wps/wps_upnp.h', + 'contrib/wpa/src/wps/wps_upnp_i.h', + 'contrib/wpa/src/l2_packet/l2_packet.h', + 'contrib/wpa/src/rsn_supp/peerkey.h', + 'contrib/wpa/src/rsn_supp/pmksa_cache.h', + 'contrib/wpa/src/rsn_supp/preauth.h', + 'contrib/wpa/src/rsn_supp/wpa.h', + 'contrib/wpa/src/rsn_supp/wpa_i.h', + 'contrib/wpa/src/rsn_supp/wpa_ie.h', + 'contrib/wpa/src/p2p/p2p.h', + 'contrib/wpa/src/fst/fst.h', + 'contrib/wpa/src/fst/fst_ctrl_iface.h', + 'contrib/wpa/src/fst/fst_ctrl_aux.h', + 'contrib/wpa/src/crypto/md5.h', + 'contrib/wpa/src/crypto/sha256.h', + 'contrib/wpa/src/crypto/sha384.h', + 'contrib/wpa/src/crypto/aes_wrap.h', + 'contrib/wpa/src/crypto/crypto.h', + 'contrib/wpa/src/crypto/random.h', + 'contrib/wpa/src/crypto/dh_group5.h', + 'contrib/wpa/src/crypto/sha1.h', + 'contrib/wpa/src/crypto/tls.h', + 'contrib/wpa/src/crypto/ms_funcs.h', + 'contrib/wpa/src/crypto/aes.h', + 'contrib/wpa/src/crypto/sha256_i.h', + 'contrib/wpa/src/eapol_supp/eapol_supp_sm.h', + 'contrib/wpa/src/eap_peer/eap_config.h', + 'contrib/wpa/src/eap_peer/eap.h', + 'contrib/wpa/src/eap_peer/eap_i.h', + 'contrib/wpa/src/eap_peer/eap_methods.h', + 'contrib/wpa/src/eap_peer/eap_proxy.h', + 'contrib/wpa/src/eap_peer/mschapv2.h', + 'contrib/wpa/src/eap_peer/tncc.h', + 'contrib/wpa/src/eap_peer/eap_tls_common.h', + 'contrib/wpa/src/eap_common/eap_defs.h', + 'contrib/wpa/src/eap_common/eap_wsc_common.h', + 'contrib/wpa/src/eap_common/eap_peap_common.h', + 'contrib/wpa/src/eap_common/eap_psk_common.h', + 'contrib/wpa/src/eap_common/eap_tlv_common.h', + 'contrib/wpa/src/eap_common/eap_common.h', + 'contrib/wpa/src/eap_common/chap.h', + 'contrib/wpa/src/eap_common/eap_ttls.h', + 'contrib/wpa/src/eap_server/eap_methods.h', + 'contrib/wpa/src/eapol_supp/eapol_supp_sm.h', + 'contrib/wpa/src/tls/tlsv1_client.h', + 'contrib/wpa/src/tls/tlsv1_cred.h', + 'contrib/wpa/src/tls/tlsv1_server.h', + 'usr.sbin/wpa/wpa_supplicant/Packet32.h', + 'usr.sbin/wpa/wpa_supplicant/ntddndis.h', + ] + ) + mod.addUserSpaceSourceFiles( + [ + 'contrib/wpa/wpa_supplicant/blacklist.c', + 'contrib/wpa/wpa_supplicant/bss.c', + 'contrib/wpa/wpa_supplicant/config.c', + 'contrib/wpa/wpa_supplicant/config_file.c', + 'contrib/wpa/wpa_supplicant/ctrl_iface.c', + 'contrib/wpa/wpa_supplicant/ctrl_iface_unix.c', + 'contrib/wpa/wpa_supplicant/eap_register.c', + 'contrib/wpa/wpa_supplicant/events.c', + 'contrib/wpa/wpa_supplicant/gas_query.c', + 'contrib/wpa/wpa_supplicant/hs20_supplicant.c', + 'contrib/wpa/wpa_supplicant/interworking.c', + 'contrib/wpa/wpa_supplicant/main.c', + 'contrib/wpa/wpa_supplicant/notify.c', + 'contrib/wpa/wpa_supplicant/offchannel.c', + 'contrib/wpa/wpa_supplicant/scan.c', + 'contrib/wpa/wpa_supplicant/wmm_ac.c', + 'contrib/wpa/wpa_supplicant/wpa_supplicant.c', + 'contrib/wpa/wpa_supplicant/wpas_glue.c', + 'contrib/wpa/wpa_supplicant/wps_supplicant.c', + 'contrib/wpa/src/ap/ap_drv_ops.c', + 'contrib/wpa/src/ap/hs20.c', + 'contrib/wpa/src/ap/ieee802_11_shared.c', + 'contrib/wpa/src/utils/base64.c', + 'contrib/wpa/src/utils/common.c', + 'contrib/wpa/src/utils/eloop.c', + 'contrib/wpa/src/utils/os_unix.c', + 'contrib/wpa/src/utils/uuid.c', + 'contrib/wpa/src/utils/wpa_debug.c', + 'contrib/wpa/src/utils/wpabuf.c', + 'contrib/wpa/src/common/gas.c', + 'contrib/wpa/src/common/hw_features_common.c', + 'contrib/wpa/src/common/ieee802_11_common.c', + 'contrib/wpa/src/common/wpa_common.c', + 'contrib/wpa/src/drivers/driver_bsd.c', + 'contrib/wpa/src/drivers/driver_common.c', + 'contrib/wpa/src/drivers/driver_ndis.c', + 'contrib/wpa/src/drivers/driver_wired.c', + 'contrib/wpa/src/drivers/drivers.c', + 'contrib/wpa/src/wps/http_client.c', + 'contrib/wpa/src/wps/http_server.c', + 'contrib/wpa/src/wps/httpread.c', + 'contrib/wpa/src/wps/upnp_xml.c', + 'contrib/wpa/src/wps/wps.c', + 'contrib/wpa/src/wps/wps_attr_build.c', + 'contrib/wpa/src/wps/wps_attr_parse.c', + 'contrib/wpa/src/wps/wps_attr_process.c', + 'contrib/wpa/src/wps/wps_common.c', + 'contrib/wpa/src/wps/wps_dev_attr.c', + 'contrib/wpa/src/wps/wps_enrollee.c', + 'contrib/wpa/src/wps/wps_registrar.c', + 'contrib/wpa/src/wps/wps_upnp.c', + 'contrib/wpa/src/wps/wps_upnp_ap.c', + 'contrib/wpa/src/wps/wps_upnp_event.c', + 'contrib/wpa/src/wps/wps_upnp_ssdp.c', + 'contrib/wpa/src/wps/wps_upnp_web.c', + 'contrib/wpa/src/l2_packet/l2_packet_freebsd.c', + 'contrib/wpa/src/rsn_supp/peerkey.c', + 'contrib/wpa/src/rsn_supp/pmksa_cache.c', + 'contrib/wpa/src/rsn_supp/preauth.c', + 'contrib/wpa/src/rsn_supp/wpa.c', + 'contrib/wpa/src/rsn_supp/wpa_ft.c', + 'contrib/wpa/src/rsn_supp/wpa_ie.c', + 'contrib/wpa/src/eapol_supp/eapol_supp_sm.c', + 'contrib/wpa/src/eap_peer/eap.c', + 'contrib/wpa/src/eap_peer/eap_methods.c', + 'contrib/wpa/src/eap_peer/eap_mschapv2.c', + 'contrib/wpa/src/eap_peer/mschapv2.c', + 'contrib/wpa/src/eap_peer/eap_md5.c', + 'contrib/wpa/src/eap_peer/eap_tls.c', + 'contrib/wpa/src/eap_peer/eap_peap.c', + 'contrib/wpa/src/eap_peer/eap_ttls.c', + 'contrib/wpa/src/eap_peer/eap_gtc.c', + 'contrib/wpa/src/eap_peer/eap_otp.c', + 'contrib/wpa/src/eap_peer/eap_leap.c', + 'contrib/wpa/src/eap_peer/eap_psk.c', + 'contrib/wpa/src/eap_peer/eap_tls_common.c', + 'contrib/wpa/src/eap_common/eap_common.c', + 'contrib/wpa/src/eap_common/eap_peap_common.c', + 'contrib/wpa/src/eap_common/eap_psk_common.c', + 'contrib/wpa/src/eap_common/chap.c', + 'contrib/wpa/src/crypto/crypto_openssl.c', + 'contrib/wpa/src/crypto/random.c', + 'contrib/wpa/src/crypto/aes-omac1.c', + 'contrib/wpa/src/crypto/sha256-prf.c', + 'contrib/wpa/src/crypto/sha256-internal.c', + 'contrib/wpa/src/crypto/sha1.c', + 'contrib/wpa/src/crypto/sha1-prf.c', + 'contrib/wpa/src/crypto/aes-unwrap.c', + 'contrib/wpa/src/crypto/rc4.c', + 'contrib/wpa/src/crypto/sha1-pbkdf2.c', + 'contrib/wpa/src/crypto/tls_internal.c', + 'contrib/wpa/src/crypto/ms_funcs.c', + 'contrib/wpa/src/crypto/aes-eax.c', + 'contrib/wpa/src/crypto/aes-ctr.c', + 'contrib/wpa/src/crypto/aes-encblock.c', + 'usr.sbin/wpa/wpa_supplicant/Packet32.c', + ], + mm.generator['source'](['-D__FreeBSD__=1', + '-DCONFIG_BACKEND_FILE=1', + '-DCONFIG_DEBUG_SYSLOG=1', + '-DCONFIG_DRIVER_BSD=1', + '-DCONFIG_DRIVER_NDIS=1', + '-DCONFIG_DRIVER_WIRED=1', + '-DCONFIG_GAS=1', + '-DCONFIG_HS20=1', + '-DCONFIG_IEEE80211R=1', + '-DCONFIG_INTERWORKING=1', + '-DCONFIG_PEERKEY=1', + '-DCONFIG_PRIVSEP=1', + '-DCONFIG_SMARTCARD=1', + '-DCONFIG_TERMINATE_ONLASTIF=1', + '-DCONFIG_TLS=openssl', + '-DCONFIG_WPS=1', + '-DCONFIG_WPS2=1', + '-DCONFIG_WPS_UPNP=1', + '-DPKCS12_FUNCS=1', + '-DCONFIG_SHA256=1', + '-DCONFIG_CTRL_IFACE=1', + '-DCONFIG_CTRL_IFACE_UNIX=1', + '-DIEEE8021X_EAPOL=1', + '-DEAP_MD5=1', + '-DEAP_GTC=1', + '-DEAP_LEAP=1', + '-DEAP_MSCHAPv2=1', + '-DEAP_OTP=1', + '-DEAP_PEAP=1', + '-DEAP_PSK=1', + '-DEAP_TLS=1', + '-DEAP_TTLS=1'], + ['freebsd/contrib/wpa/src', + 'freebsd/contrib/wpa/src/utils', + 'freebsd/contrib/wpa/src/eap_peer', + 'freebsd/usr.sbin/wpa/wpa_supplicant', + 'freebsd/crypto/openssl/crypto']) + ) + mod.addRTEMSSourceFiles( + [ + 'rtems/rtems-bsd-shell-wpa_supplicant.c', + 'rtems/rtems-wpa_supplicant_mutex.c', + ], + mm.generator['source']() + ) + return mod + # # in_chksum Module # @@ -4338,6 +4623,7 @@ def sources(mm): mm.addModule(contrib_expat(mm)) mm.addModule(contrib_libpcap(mm)) mm.addModule(usr_sbin_tcpdump(mm)) + mm.addModule(usr_sbin_wpa_supplicant(mm)) mm.addModule(crypto_openssl(mm)) mm.addModule(tests(mm)) diff --git a/libbsd_waf.py b/libbsd_waf.py index 4a985f69..42b8fb2c 100644 --- a/libbsd_waf.py +++ b/libbsd_waf.py @@ -64,6 +64,7 @@ def build(bld): includes += ["rtemsbsd/include"] includes += ["freebsd/sys"] includes += ["freebsd/sys/contrib/pf"] + includes += ["freebsd/crypto"] includes += ["freebsd/sys/net"] includes += ["freebsd/include"] includes += ["freebsd/lib"] @@ -1405,7 +1406,111 @@ def build(bld): source = objs07_source) libbsd_use += ["objs07"] - objs08_source = ['freebsd/contrib/tcpdump/addrtoname.c', + objs08_source = ['freebsd/contrib/wpa/src/ap/ap_drv_ops.c', + 'freebsd/contrib/wpa/src/ap/hs20.c', + 'freebsd/contrib/wpa/src/ap/ieee802_11_shared.c', + 'freebsd/contrib/wpa/src/common/gas.c', + 'freebsd/contrib/wpa/src/common/hw_features_common.c', + 'freebsd/contrib/wpa/src/common/ieee802_11_common.c', + 'freebsd/contrib/wpa/src/common/wpa_common.c', + 'freebsd/contrib/wpa/src/crypto/aes-ctr.c', + 'freebsd/contrib/wpa/src/crypto/aes-eax.c', + 'freebsd/contrib/wpa/src/crypto/aes-encblock.c', + 'freebsd/contrib/wpa/src/crypto/aes-omac1.c', + 'freebsd/contrib/wpa/src/crypto/aes-unwrap.c', + 'freebsd/contrib/wpa/src/crypto/crypto_openssl.c', + 'freebsd/contrib/wpa/src/crypto/ms_funcs.c', + 'freebsd/contrib/wpa/src/crypto/random.c', + 'freebsd/contrib/wpa/src/crypto/rc4.c', + 'freebsd/contrib/wpa/src/crypto/sha1-pbkdf2.c', + 'freebsd/contrib/wpa/src/crypto/sha1-prf.c', + 'freebsd/contrib/wpa/src/crypto/sha1.c', + 'freebsd/contrib/wpa/src/crypto/sha256-internal.c', + 'freebsd/contrib/wpa/src/crypto/sha256-prf.c', + 'freebsd/contrib/wpa/src/crypto/tls_internal.c', + 'freebsd/contrib/wpa/src/drivers/driver_bsd.c', + 'freebsd/contrib/wpa/src/drivers/driver_common.c', + 'freebsd/contrib/wpa/src/drivers/driver_ndis.c', + 'freebsd/contrib/wpa/src/drivers/driver_wired.c', + 'freebsd/contrib/wpa/src/drivers/drivers.c', + 'freebsd/contrib/wpa/src/eap_common/chap.c', + 'freebsd/contrib/wpa/src/eap_common/eap_common.c', + 'freebsd/contrib/wpa/src/eap_common/eap_peap_common.c', + 'freebsd/contrib/wpa/src/eap_common/eap_psk_common.c', + 'freebsd/contrib/wpa/src/eap_peer/eap.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_gtc.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_leap.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_md5.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_methods.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_mschapv2.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_otp.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_peap.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_psk.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_tls.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_tls_common.c', + 'freebsd/contrib/wpa/src/eap_peer/eap_ttls.c', + 'freebsd/contrib/wpa/src/eap_peer/mschapv2.c', + 'freebsd/contrib/wpa/src/eapol_supp/eapol_supp_sm.c', + 'freebsd/contrib/wpa/src/l2_packet/l2_packet_freebsd.c', + 'freebsd/contrib/wpa/src/rsn_supp/peerkey.c', + 'freebsd/contrib/wpa/src/rsn_supp/pmksa_cache.c', + 'freebsd/contrib/wpa/src/rsn_supp/preauth.c', + 'freebsd/contrib/wpa/src/rsn_supp/wpa.c', + 'freebsd/contrib/wpa/src/rsn_supp/wpa_ft.c', + 'freebsd/contrib/wpa/src/rsn_supp/wpa_ie.c', + 'freebsd/contrib/wpa/src/utils/base64.c', + 'freebsd/contrib/wpa/src/utils/common.c', + 'freebsd/contrib/wpa/src/utils/eloop.c', + 'freebsd/contrib/wpa/src/utils/os_unix.c', + 'freebsd/contrib/wpa/src/utils/uuid.c', + 'freebsd/contrib/wpa/src/utils/wpa_debug.c', + 'freebsd/contrib/wpa/src/utils/wpabuf.c', + 'freebsd/contrib/wpa/src/wps/http_client.c', + 'freebsd/contrib/wpa/src/wps/http_server.c', + 'freebsd/contrib/wpa/src/wps/httpread.c', + 'freebsd/contrib/wpa/src/wps/upnp_xml.c', + 'freebsd/contrib/wpa/src/wps/wps.c', + 'freebsd/contrib/wpa/src/wps/wps_attr_build.c', + 'freebsd/contrib/wpa/src/wps/wps_attr_parse.c', + 'freebsd/contrib/wpa/src/wps/wps_attr_process.c', + 'freebsd/contrib/wpa/src/wps/wps_common.c', + 'freebsd/contrib/wpa/src/wps/wps_dev_attr.c', + 'freebsd/contrib/wpa/src/wps/wps_enrollee.c', + 'freebsd/contrib/wpa/src/wps/wps_registrar.c', + 'freebsd/contrib/wpa/src/wps/wps_upnp.c', + 'freebsd/contrib/wpa/src/wps/wps_upnp_ap.c', + 'freebsd/contrib/wpa/src/wps/wps_upnp_event.c', + 'freebsd/contrib/wpa/src/wps/wps_upnp_ssdp.c', + 'freebsd/contrib/wpa/src/wps/wps_upnp_web.c', + 'freebsd/contrib/wpa/wpa_supplicant/blacklist.c', + 'freebsd/contrib/wpa/wpa_supplicant/bss.c', + 'freebsd/contrib/wpa/wpa_supplicant/config.c', + 'freebsd/contrib/wpa/wpa_supplicant/config_file.c', + 'freebsd/contrib/wpa/wpa_supplicant/ctrl_iface.c', + 'freebsd/contrib/wpa/wpa_supplicant/ctrl_iface_unix.c', + 'freebsd/contrib/wpa/wpa_supplicant/eap_register.c', + 'freebsd/contrib/wpa/wpa_supplicant/events.c', + 'freebsd/contrib/wpa/wpa_supplicant/gas_query.c', + 'freebsd/contrib/wpa/wpa_supplicant/hs20_supplicant.c', + 'freebsd/contrib/wpa/wpa_supplicant/interworking.c', + 'freebsd/contrib/wpa/wpa_supplicant/main.c', + 'freebsd/contrib/wpa/wpa_supplicant/notify.c', + 'freebsd/contrib/wpa/wpa_supplicant/offchannel.c', + 'freebsd/contrib/wpa/wpa_supplicant/scan.c', + 'freebsd/contrib/wpa/wpa_supplicant/wmm_ac.c', + 'freebsd/contrib/wpa/wpa_supplicant/wpa_supplicant.c', + 'freebsd/contrib/wpa/wpa_supplicant/wpas_glue.c', + 'freebsd/contrib/wpa/wpa_supplicant/wps_supplicant.c', + 'freebsd/usr.sbin/wpa/wpa_supplicant/Packet32.c'] + bld.objects(target = "objs08", + features = "c", + cflags = cflags, + includes = ['freebsd/contrib/wpa/src', 'freebsd/contrib/wpa/src/eap_peer', 'freebsd/contrib/wpa/src/utils', 'freebsd/crypto/openssl/crypto', 'freebsd/usr.sbin/wpa/wpa_supplicant'] + includes, + defines = defines + ['CONFIG_BACKEND_FILE=1', 'CONFIG_CTRL_IFACE=1', 'CONFIG_CTRL_IFACE_UNIX=1', 'CONFIG_DEBUG_SYSLOG=1', 'CONFIG_DRIVER_BSD=1', 'CONFIG_DRIVER_NDIS=1', 'CONFIG_DRIVER_WIRED=1', 'CONFIG_GAS=1', 'CONFIG_HS20=1', 'CONFIG_IEEE80211R=1', 'CONFIG_INTERWORKING=1', 'CONFIG_PEERKEY=1', 'CONFIG_PRIVSEP=1', 'CONFIG_SHA256=1', 'CONFIG_SMARTCARD=1', 'CONFIG_TERMINATE_ONLASTIF=1', 'CONFIG_TLS=openssl', 'CONFIG_WPS2=1', 'CONFIG_WPS=1', 'CONFIG_WPS_UPNP=1', 'EAP_GTC=1', 'EAP_LEAP=1', 'EAP_MD5=1', 'EAP_MSCHAPv2=1', 'EAP_OTP=1', 'EAP_PEAP=1', 'EAP_PSK=1', 'EAP_TLS=1', 'EAP_TTLS=1', 'IEEE8021X_EAPOL=1', 'PKCS12_FUNCS=1', '__FreeBSD__=1'], + source = objs08_source) + libbsd_use += ["objs08"] + + objs09_source = ['freebsd/contrib/tcpdump/addrtoname.c', 'freebsd/contrib/tcpdump/addrtostr.c', 'freebsd/contrib/tcpdump/af.c', 'freebsd/contrib/tcpdump/ascii_strcasecmp.c', @@ -1572,13 +1677,13 @@ def build(bld): 'freebsd/contrib/tcpdump/smbutil.c', 'freebsd/contrib/tcpdump/tcpdump.c', 'freebsd/contrib/tcpdump/util-print.c'] - bld.objects(target = "objs08", + bld.objects(target = "objs09", features = "c", cflags = cflags, includes = ['freebsd/contrib/tcpdump', 'freebsd/usr.sbin/tcpdump/tcpdump'] + includes, defines = defines + ['HAVE_CONFIG_H=1', 'HAVE_NET_PFVAR_H=1', 'INET6', '_U_=__attribute__((unused))', '__FreeBSD__=1'], - source = objs08_source) - libbsd_use += ["objs08"] + source = objs09_source) + libbsd_use += ["objs09"] source = ['freebsd/sys/arm/lpc/if_lpe.c', 'freebsd/sys/arm/lpc/lpc_pwr.c', @@ -2219,6 +2324,7 @@ def build(bld): 'rtemsbsd/rtems/rtems-bsd-shell-tcpdump.c', 'rtemsbsd/rtems/rtems-bsd-shell-vmstat.c', 'rtemsbsd/rtems/rtems-bsd-shell-wlanstats.c', + 'rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant.c', 'rtemsbsd/rtems/rtems-bsd-syscall-api.c', 'rtemsbsd/rtems/rtems-kernel-assert.c', 'rtemsbsd/rtems/rtems-kernel-autoconf.c', @@ -2260,6 +2366,7 @@ def build(bld): 'rtemsbsd/rtems/rtems-program-socket.c', 'rtemsbsd/rtems/rtems-program.c', 'rtemsbsd/rtems/rtems-routes.c', + 'rtemsbsd/rtems/rtems-wpa_supplicant_mutex.c', 'rtemsbsd/rtems/syslog.c', 'rtemsbsd/sys/dev/atsam/if_atsam.c', 'rtemsbsd/sys/dev/atsam/if_atsam_media.c', diff --git a/rtemsbsd/include/bsp/nexus-devices.h b/rtemsbsd/include/bsp/nexus-devices.h index 320922b9..a44149a6 100644 --- a/rtemsbsd/include/bsp/nexus-devices.h +++ b/rtemsbsd/include/bsp/nexus-devices.h @@ -63,6 +63,8 @@ SYSINIT_MODULE_REFERENCE(wlan_ratectl_none); SYSINIT_MODULE_REFERENCE(wlan_sta); SYSINIT_MODULE_REFERENCE(wlan_amrr); SYSINIT_MODULE_REFERENCE(wlan_wep); +SYSINIT_MODULE_REFERENCE(wlan_tkip); +SYSINIT_MODULE_REFERENCE(wlan_ccmp); SYSINIT_REFERENCE(rtwn_rtl8188eufw); RTEMS_BSD_DRIVER_USB; diff --git a/rtemsbsd/include/machine/rtems-bsd-commands.h b/rtemsbsd/include/machine/rtems-bsd-commands.h index 9e9ed1c5..03a09bc4 100644 --- a/rtemsbsd/include/machine/rtems-bsd-commands.h +++ b/rtemsbsd/include/machine/rtems-bsd-commands.h @@ -62,6 +62,8 @@ int rtems_bsd_command_route(int argc, char **argv); int rtems_bsd_command_dhcpcd(int argc, char **argv); +int rtems_bsd_command_wpa_supplicant(int argc, char **argv); + int rtems_bsd_command_tcpdump(int argc, char **argv); int rtems_bsd_command_sysctl(int argc, char **argv); diff --git a/rtemsbsd/include/machine/rtems-wpa_supplicant-mutex.h b/rtemsbsd/include/machine/rtems-wpa_supplicant-mutex.h new file mode 100644 index 00000000..1abb177e --- /dev/null +++ b/rtemsbsd/include/machine/rtems-wpa_supplicant-mutex.h @@ -0,0 +1,41 @@ +/** + * @file + * + * @ingroup rtems_bsd_machine + * + * @brief TODO. + */ + +/* + * Copyright (c) 2017 Sichen Zhao. All rights reserved. + * + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _RTEMS_BSD_MACHINE_RTEMS_WPA_SUPPLICANT_MUTEX_H_ +#define _RTEMS_BSD_MACHINE_RTEMS_WPA_SUPPLICANT_MUTEX_H_ + +extern struct mtx wpa_supplicant_mtx; + +#endif /* _RTEMS_BSD_MACHINE_RTEMS_WPA_SUPPLICANT_MUTEX_H_ */ diff --git a/rtemsbsd/include/rtems/netcmds-config.h b/rtemsbsd/include/rtems/netcmds-config.h index 515b265e..046c8597 100644 --- a/rtemsbsd/include/rtems/netcmds-config.h +++ b/rtemsbsd/include/rtems/netcmds-config.h @@ -39,6 +39,8 @@ extern rtems_shell_cmd_t rtems_shell_HOSTNAME_Command; extern rtems_shell_cmd_t rtems_shell_TCPDUMP_Command; +extern rtems_shell_cmd_t rtems_shell_WPA_SUPPLICANT_Command; + extern rtems_shell_cmd_t rtems_shell_SYSCTL_Command; extern rtems_shell_cmd_t rtems_shell_VMSTAT_Command; diff --git a/rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant.c b/rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant.c new file mode 100644 index 00000000..32ebb86e --- /dev/null +++ b/rtemsbsd/rtems/rtems-bsd-shell-wpa_supplicant.c @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2017 Sichen Zhao. All rights reserved. + * + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include + +rtems_shell_cmd_t rtems_shell_WPA_SUPPLICANT_Command = { + .name = "wpa_supplicant", + .usage = "wpa_supplicant [args]", + .topic = "net", + .command = rtems_bsd_command_wpa_supplicant +}; diff --git a/rtemsbsd/rtems/rtems-wpa_supplicant_mutex.c b/rtemsbsd/rtems/rtems-wpa_supplicant_mutex.c new file mode 100644 index 00000000..737fd04f --- /dev/null +++ b/rtemsbsd/rtems/rtems-wpa_supplicant_mutex.c @@ -0,0 +1,47 @@ +/** + * @file + * + * @ingroup rtems_bsd_rtems + * + * @brief TODO. +*/ + +/* + * Copyright (c) 2017, Sichen Zhao. All rights reserved. + * + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include + +#include +#include +#include +#include +#include + +struct mtx wpa_supplicant_mtx; + +MTX_SYSINIT(wpa_supplicant_program, &wpa_supplicant_mtx, "WPA program", MTX_DEF); -- cgit v1.2.3