This application note is applicable to the XU4/C1+/C2 Ubuntu/Linux Platforms.

One user (tam1111574) reported there was an issue with USB 3.0 port on the XU4.
http://forum.odroid.com/viewtopic.php?f=97&t=19285

Hostapd

hostapd is a user space daemon for access point and authentication servers. It implements IEEE 802.11 access point management, IEEE 802.1X/WPA/WPA2/EAP Authenticators, RADIUS client, EAP server, and RADIUS authentication server.

Odroid Wireless Cards

All most all the wireless card have capability of configuration as Access Point.

$ sudo iwlist 

If there is 'AP' in the list of “Supported interface modes” your device will support the Access Point mode with hostapd.

...
 Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * WDS
                 * monitor
                 * mesh point

Wifi Module 3

Manufacturer: Realtek
Part name: RTL8188CUS
Type: chip
Number of busses: 1
Bus(es): USB 2.0
Number of bands: 1
Band(s): 2.4GHz
Data rate: 150Mbps
MIMO configuration: 1x1:1 (1T1R)
IEEE 802.11 PHY Modes: b,g,n

Bus 001 Device 003: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

Please find more information on https://wireless.wiki.kernel.org/en/users/documentation/hostapd

Wifi Module 4

Manufacturer: Ralink
Part name: RT5572
Type: chip
Number of busses: 1
Bus(es): USB 2.0
Number of bands: 2
Band(s): 2.4GHz, 5GHz
Data rate: 300Mbps
MIMO configuration: 2x2:2 (2T2R)
IEEE 802.11 PHY Modes: a,b,g,n

Bus 001 Device 006: ID 148f:5572 Ralink Technology, Corp. RT5572 Wireless Adapter

Wifi Module 5

Manufacturer: Realtek
Type: chip
Number of busses: 1
Bus(es): USB 3.0
Number of bands: 2
Band(s): 2.4GHz, 5GHz
Data rate: 300Mbps
MIMO configuration: 2x2:2 (2T2R)
IEEE 802.11 PHY Modes: a,b,g,n,ac

Bus 003: ID 0bda:8812 Realtek Semiconductor Corp. RTL8812AU 802.11a/b/g/n/ac WLAN Adapter

Configure Wireless network interface and Dnsmasq demon.

Configure access point divides into following task.

  • Setup Network interface configuration
  • Setup DHCP server configuration
  • Setup Hostapd server configuration.
  • Setup Iptables to forward the internet traffic from Ethernet to wireless lan.
  • Check your service status.

Step 1: Setup Network interface configuration.

In order to configure Wireless Access Point you need to provide static IPaddress to Wireless network card.

 # vim /etc/network/interfaces 
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto wlan0
iface wlan0 inet static
        address 192.168.1.1
        netmask 255.255.255.0

Note : Predictable interface names suppose you have interface name

root@odroid:~# ifconfig
enx7cdd9052131e Link encap:Ethernet  HWaddr 7c:dd:90:52:13:1e
         UP BROADCAST MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:321 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

By adding net.ifnames=0 as kernel parameter to kernel command line by editing the boot.ini. Local interface name issue get resolved to predictable name for wireless interface.

root@odroid:~# ifconfig
wlan0     Link encap:Ethernet  HWaddr 7c:dd:90:52:13:1e
         UP BROADCAST MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:10 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Note: wlan0 ipaddress should be different from your router.

Note: wireless interface name can change depend on wireless cards.

Step 2: Setup DHCP server configuration for Access Point.

We configure dnsmasq light weight dhcp and dns server.

$ sudo apt-get install --reinstall dnsmasq
$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
$ sudo vim /etc/dnsmasq.conf
domain-needed
bogus-priv
no-resolv
no-poll
server=/example.com/192.168.1.5
server=8.8.8.8
server=4.4.4.4
local=/example.com/
address=/doubleclick.net/127.0.0.1
no-hosts
#addn-hosts=/etc/dnsmasq.d/hosts.conf
expand-hosts
domain=example.com
dhcp-range=192.168.1.20,192.168.1.50,72h
dhcp-range=tftp,192.168.1.250,192.168.1.254
dhcp-option=option:router,192.168.1.1
dhcp-option=option:ntp-server,192.168.1.5
dhcp-option=19,0 # ip-forwarding off
dhcp-option=44,192.168.1.5 # set netbios-over-TCP/IP aka WINS
dhcp-option=45,192.168.1.5 # netbios datagram distribution server
dhcp-option=46,8           # netbios node type

Note: Reconfigure dnsmasq: You can extend the dhcp-range or change the ipaddress in the configuration.

Step 3 : Setup Hostapd server configuration

Pre software requirement for building hostapd.

sudo apt-get install libnl-3-dev libnl-genl-3-dev libssl-dev hostapd iptables git-core pkg-config

Configuration for Wifi Module 0

HostAP demon configration for Ralink RT5370 module only.

Hostapd Configuration file for Access Point
sudo vim /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"

DAEMON_OPTS="-B"

Note: You can update this DAEMON_OPTS to get the logs from Hostapd demon.

vim /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=ODROID_AP
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=hardkernel
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Configuration for Wifi Module 3

HostAP demon configuration for Realtek RTL8192CU module only. Kernel version: 3.10.x, 3.14.x 3.16.x

Download the latest hostapd source code and patch for RTL8192CU.

Steps to get the hostapd compilation.

Note: Realtek RTL8192CU do not support the standard nl80211 driver of hostapd for 3.10.x 3.14.x 3.16.x

$ git clone https://github.com/pritambaral/hostapd-rtl871xdrv.git
 
$ wget https://w1.fi/releases/hostapd-2.6.tar.gz
$ tar xvfz hostapd-2.6.tar.gz
$ cd hostapd-2.6
$ patch -p1 < ../hostapd-rtl871xdrv/rtlxdrv.patch
$ cd hostapd
$ cp defconfig .config
$ echo CONFIG_LIBNL32=y >> .config
$ echo CONFIG_DRIVER_RTW=y >> .config 
$ make

Backup the hostapd demon. Replace the demon with configured one.

$ sudo cp /usr/sbin/hostapd /usr/sbin/hostapd.back
$ sudo cp hostapd /usr/sbin/hostapd

Verify that you have installed the latest version

$ /usr/sbin/hostapd -v
hostapd v2.6 for Realtek rtl871xdrv
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2016, Jouni Malinen <j@w1.fi> and contributors
Hostapd Configuration file for Access Point
sudo vi /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"

DAEMON_OPTS="-B"

Note: You can update this DAEMON_OPTS to get the logs from Hostapd demon.

sudo vi /etc/hostapd/hostapd.conf
# interface 
interface=wlan0

# driver
driver=rtl871xdrv

# CTRL-Interface
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0

# SSID
ssid=OdroidAP

# WLAN
country_code=KR
hw_mode=g
channel=1
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
preamble=1

# Logging
logger_syslog=-1
logger_syslog_level=3
logger_stdout=-1
logger_stdout_level=2

# passphrase
wpa_passphrase=hardkernel

# WPA2
wpa=3
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
beacon_int=100
auth_algs=3                     # 1=wpa, 2=wep, 3=both
macaddr_acl=0
wmm_enabled=1
eap_reauth_period=360000000

rsn_preauth=1
rsn_preauth_interfaces=wlan0
wpa_group_rekey=600
wpa_ptk_rekey=600
wpa_gmk_rekey=86400

Note: Replace the country_code, ssid, and wpa_passphrase as per your requirement.

Configuration for Wifi Module 3 or Wifi Module 4 or Wifi Module 5

Wifi Module 3: HostAP demon configuration for Realtek RTL8192CU Adapater (For Odroid XU4: Kernel 4.14.125.x and above)

Wifi Module 4: HostAP demon configuration for Ralink Technology, Corp. RT5572 Wireless Adapter.

Wifi Module 5: HostAP demon configuration for Realtek RTL8812AU chipset.

Steps to get the hostapd compilation. Download the latest hostapd source code

$ wget https://w1.fi/releases/hostapd-2.6.tar.gz
$ tar xvfz hostapd-2.6.tar.gz
$ cd hostapd-2.6
$ cd hostapd
$ cp defconfig .config
$ echo CONFIG_LIBNL32=y >> .config
$ echo CONFIG_IEEE80211N=y >> .config
$ echo CONFIG_IEEE80211AC=y >> .config
$ make

Backup the hostapd demon. Replace the demon with configured one.

$ cp /usr/sbin/hostapd /usr/sbin/hostapd.back
$ cp hostapd /usr/sbin/hostapd

Verify that you have installed the latest version

hostapd v2.6
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2016, Jouni Malinen <j@w1.fi> and contributors
Hostapd Configuration file for Access Point
sudo vi /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"

DAEMON_OPTS="-B"

Note: You can update this DAEMON_OPTS to get the logs from Hostapd demon.

vi /etc/hostapd/hostapd.conf

Hostapd configuration for 2.4 Ghz configuration

# HostAPD

# Interface
interface=wlan0

# driver
driver=nl80211

# Logging
logger_syslog=-1
logger_syslog_level=3
logger_stdout=-1
logger_stdout_level=2

# CTRL-Interface
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0

# WLAN
country_code=KR
ssid=OdroidAPn
hw_mode=g
channel=6
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
preamble=1

# WPA2
wpa=2                            # WPA2 only
wpa_passphrase=hardkernel
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=3                      # 1=wpa, 2=wep, 3=both
macaddr_acl=0
wmm_enabled=1
eap_reauth_period=360000
fragm_threshold=2346
rsn_preauth=1
rsn_preauth_interfaces=wlan0
wpa_group_rekey=600
wpa_ptk_rekey=600
wpa_gmk_rekey=86400

# N-WLAN
ieee80211n=1
ht_capab=[HT20+][SHORT-GI-20][DSSS_CCK-20]
require_ht=0
obss_interval=0

Hostapd configuration for 5 Ghz Realtek RTL8812AU chipset

### hostapd configuration file
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
interface=wlan0
driver=nl80211

### IEEE 802.11
ssid=Odroid5Ghz
hw_mode=a
channel=36
max_num_sta=128
auth_algs=1

### DFS
country_code=KR
ieee80211d=1
ieee80211h=1
#ieee80211ac=1

### IEEE 802.11n
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-20]

### IEEE 802.11ac
#ieee80211ac=1
#vht_oper_chwidth=1
#vht_capab=[SHORT-GI-40][RXLDPC][TX-STBC-2BY1]
#vht_oper_centr_freq_seg0_idx=0

### IEEE 802.11i
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=hardkernel
rsn_pairwise=CCMP

### hostapd event logger
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
### WMM
wmm_enabled=1
uapsd_advertisement_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0

### TX queue parameters
tx_queue_data3_aifs=7
tx_queue_data3_cwmin=15
tx_queue_data3_cwmax=1023
tx_queue_data3_burst=0
tx_queue_data2_aifs=3
tx_queue_data2_cwmin=15
tx_queue_data2_cwmax=63
tx_queue_data2_burst=0
tx_queue_data1_aifs=1
tx_queue_data1_cwmin=7
tx_queue_data1_cwmax=15
tx_queue_data1_burst=3.0
tx_queue_data0_aifs=1
tx_queue_data0_cwmin=3
tx_queue_data0_cwmax=7
tx_queue_data0_burst=1.5

Note: Depending on the ht_capab with the Wifi module4 and Wifi moudule5 we need to tune these setting.

Note: Replace the country_code, ssid, and wpa_passphrase as per your requirement.

Note: N-WLAN is optional can be dropped out.

Step 4: Setup Iptables to forward the internet traffic from Ethernet to Wireless lan

Next, have port forwarding enabled automatically on boot up.

$ sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Access Internet over WIFI. Append the following to redirect internet traffic to wireless lan

$ sudo vi /etc/rc.local
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Note: Depend on the wireless network interface name update the iptables rules.

Step 5: Check your service status

On ubuntu 14.04.x check the service status as follows

sudo update-rc.d hostapd enable
$ service hostapd restart
 
* Stopping advanced IEEE 802.11 management hostapd [ OK ]
* Starting advanced IEEE 802.11 management hostapd [ OK ]
$ service hostapd status
 * hostapd is running

on Ubuntu 16.04.x check the service status as follows

$ sudo systemctl status hostapd.service
● hostapd.service - LSB: Advanced IEEE 802.11 management daemon
   Loaded: loaded (/etc/init.d/hostapd; bad; vendor preset: enabled)
   Active: active (running) since Sun 2017-07-09 19:48:41 UTC; 31s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 789 ExecStart=/etc/init.d/hostapd start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/hostapd.service
           └─798 /usr/sbin/hostapd -B -P /run/hostapd.pid -B /etc/hostapd/hostapd-2.6.conf

Jul 09 19:48:41 odroid systemd[1]: Starting LSB: Advanced IEEE 802.11 management daemon...
Jul 09 19:48:41 odroid hostapd[789]:  * Starting advanced IEEE 802.11 management hostapd
Jul 09 19:48:41 odroid hostapd[789]:    ...done.
Jul 09 19:48:41 odroid systemd[1]: Started LSB: Advanced IEEE 802.11 management daemon.
$ sudo systemctl status dnsmasq.service
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
   Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
  Drop-In: /run/systemd/generator/dnsmasq.service.d
           └─50-dnsmasq-$named.conf, 50-insserv.conf-$named.conf
   Active: active (running) since Sun 2017-07-09 19:48:31 UTC; 4min 36s ago
  Process: 592 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/SUCCESS)
  Process: 575 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=0/SUCCESS)
  Process: 554 ExecStartPre=/usr/sbin/dnsmasq --test (code=exited, status=0/SUCCESS)
 Main PID: 591 (dnsmasq)
   CGroup: /system.slice/dnsmasq.service
           └─591 /usr/sbin/dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,

Jul 09 19:48:30 odroid dnsmasq[591]: DNS service limited to local subnets
Jul 09 19:48:30 odroid dnsmasq[591]: warning: ignoring resolv-file flag because no-resolv is set
Jul 09 19:48:30 odroid dnsmasq-dhcp[591]: DHCP, IP range 192.168.1.250 -- 192.168.1.254, lease time 1h
Jul 09 19:48:30 odroid dnsmasq-dhcp[591]: DHCP, IP range 192.168.1.20 -- 192.168.1.50, lease time 3d
Jul 09 19:48:30 odroid dnsmasq[591]: using local addresses only for domain example.com
Jul 09 19:48:30 odroid dnsmasq[591]: using nameserver 4.4.4.4#53
Jul 09 19:48:30 odroid dnsmasq[591]: using nameserver 8.8.8.8#53
Jul 09 19:48:30 odroid dnsmasq[591]: using nameserver 192.168.1.5#53 for domain example.com
Jul 09 19:48:30 odroid dnsmasq[591]: cleared cache
Jul 09 19:48:31 odroid systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
lines 1-22/22 (END)