+++ /dev/null
-#!/bin/bash
-###############################################################################
-# #
-# IPFire.org - A linux based firewall #
-# Copyright (C) 2013 Michael Tremer #
-# #
-# This program is free software: you can redistribute it and/or modify #
-# it under the terms of the GNU General Public License as published by #
-# the Free Software Foundation, either version 3 of the License, or #
-# (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU General Public License for more details. #
-# #
-# You should have received a copy of the GNU General Public License #
-# along with this program. If not, see <http://www.gnu.org/licenses/>. #
-# #
-###############################################################################
-
-. /usr/lib/network/header-zone
-
-HOOK_SETTINGS="HOOK ADDRESS MESH_ID SSID CHANNEL PHY"
-
-# Default values
-ADDRESS=$(mac_generate)
-CHANNEL=1
-MESH_ID=
-SSID=
-
-# batman-adv inserts an additional header of 28 bytes, so we set the MTU
-# to 1528, that normal ethernet packets with 1500 bytes can pass the network.
-MTU=1528
-
-function hook_check() {
- assert isset ADDRESS
- assert ismac ADDRESS
- assert isset CHANNEL
- assert isset MESH_ID
- assert ismac MESH_ID
- assert isset PHY
- assert ismac PHY
- assert isset SSID
-}
-
-function hook_parse_cmdline() {
- while [ $# -gt 0 ]; do
- case "${1}" in
- --address=*)
- ADDRESS="$(cli_get_val ${1})"
- ;;
- --channel=*)
- CHANNEL="$(cli_get_val ${1})"
- ;;
- --mesh-id=*)
- MESH_ID="$(cli_get_val ${1})"
- ;;
- --phy=*)
- PHY="$(cli_get_val ${1})"
- ;;
- --ssid=*)
- SSID=$(cli_get_val ${1})
- ;;
- *)
- warning "Unrecognized option: ${1}"
- ;;
- esac
- shift
- done
-
- # Save address of phy do identify it again
- PHY=$(phy_get ${PHY})
- PHY=$(phy_get_address ${PHY})
-
- return ${EXIT_OK}
-}
-
-function hook_up() {
- local zone=${1}
- assert isset zone
-
- # Read zone configuration.
- zone_config_read ${zone}
-
- # Check if the PHY is present.
- local phy="$(phy_get ${PHY})"
- if ! isset phy; then
- log DEBUG "phy '${PHY}' is not present"
- exit ${EXIT_ERROR}
- fi
-
- # Create the wireless device, if it does not exist, yet.
- if ! device_exists "${zone}"; then
- wireless_create "${zone}" \
- --address="${ADDRESS}" \
- --phy="${phy}" \
- --type="ibss"
- fi
-
- # Set the MTU.
- device_set_mtu "${zone}" "${MTU}"
-
- # Join the ad-hoc network.
- wireless_ibss_join "${zone}" --channel="${CHANNEL}" \
- --bssid="${MESH_ID}" --essid="${SSID}"
-
- # Add the device as a batman-adv device.
- batman_adv_interface_add "${zone}"
-
- zone_configs_up ${zone}
-
- exit ${EXIT_OK}
-}
-
-function hook_down() {
- local zone=${1}
- shift
-
- if ! device_is_up ${zone}; then
- warning "Zone '${zone}' is not up"
- exit ${EXIT_OK}
- fi
-
- zone_configs_down ${zone}
-
- # Remove the batman-adv device.
- batman_adv_interface_del "${zone}"
-
- # Leave the ad-hoc network.
- wireless_ibss_leave "${zone}"
-
- # Remove the device if it is still present.
- if device_exists "${zone}"; then
- wireless_remove "${zone}"
- fi
-
- exit ${EXIT_OK}
-}
-
-function hook_status() {
- local zone=${1}
- assert isset zone
-
- # Print the default header.
- cli_device_headline ${zone}
-
- # Exit if zone is down
- if ! zone_is_up ${zone}; then
- echo # Empty line
- exit ${EXIT_ERROR}
- fi
-
- cli_headline 2 "Wireless network information"
- cli_print_fmt1 2 "SSID" "$(wpa_cli_status_get ${zone} ssid)"
- cli_space
-
- cli_headline 3 "Access Point"
- local bssid=$(wpa_cli_status_get ${zone} bssid)
- assert isset bssid
-
- cli_print_fmt1 3 "BSSID" "${bssid}"
- cli_print_fmt1 3 "Frequency" \
- "$(wpa_cli_bss_get_frequency ${zone} ${bssid}) MHz"
- cli_print_fmt1 3 "Noise" \
- "$(wpa_cli_bss_get_noise ${zone} ${bssid})"
- cli_print_fmt1 3 "Quality" \
- "$(wpa_cli_bss_get_quality ${zone} ${bssid})"
- cli_print_fmt1 3 "Flags" \
- "$(wpa_cli_bss_get_flags ${zone} ${bssid})"
- cli_space
-
- cli_headline 3 "Encryption"
- cli_print_fmt1 3 "Mode" \
- "$(wpa_cli_status_get ${zone} key_mgmt)"
- cli_print_fmt1 3 "Pairwise cipher" \
- "$(wpa_cli_status_get ${zone} pairwise_cipher)"
- cli_print_fmt1 3 "Group cipher" \
- "$(wpa_cli_status_get ${zone} group_cipher)"
- cli_space
-
- cli_headline 2 "Configurations"
- zone_configs_cmd status ${zone}
- cli_space
-
- exit ${EXIT_OK}
-}