![DanielC](/assets/img/avatar_default.png)
The Silicom Bypass Network Interface Cards (NICs) are network cards with paired ports (2 or 4). The pairs either act as a "wire" allowing the network packets to pass or insert the device in between the two ports. When paired with the on-board hardware watchdog or other failsafe, they provide high availability for the network in the face of software outages or maintenance. Signed-off-by: Daniel Cotey <puff65537@bansheeslibrary.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
510 lines
18 KiB
C
510 lines
18 KiB
C
/******************************************************************************/
|
|
/* */
|
|
/* bypass library, Copyright (c) 2004 Silicom, Ltd */
|
|
/* Corporation. */
|
|
/* */
|
|
/* 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, located in the file LICENSE. */
|
|
/* */
|
|
/* Ver 1.0.0 */
|
|
/* */
|
|
/* libbypass.h */
|
|
/* */
|
|
/******************************************************************************/
|
|
|
|
/**
|
|
* is_bypass - check if device is a Bypass controlling device
|
|
* @if_index: network device index
|
|
*
|
|
* Output:
|
|
* 1 - if device is bypass controlling device,
|
|
* 0 - if device is bypass slave device
|
|
* -1 - device not support Bypass
|
|
**/
|
|
int is_bypass_sd(int if_index);
|
|
|
|
/**
|
|
* get_bypass_slave - get second port participate in the Bypass pair
|
|
* @if_index: network device index
|
|
*
|
|
* Output:
|
|
* network device index of the slave device
|
|
* -1 - on failure (device not support Bypass or it's a slave device)
|
|
**/
|
|
int get_bypass_slave_sd(int if_index);
|
|
|
|
/**
|
|
* get_bypass_caps - get second port participate in the Bypass pair
|
|
* @if_index: network device index
|
|
*
|
|
* Output:
|
|
* flags word on success;flag word is a 32-bit mask word with each bit defines different
|
|
* capability as described bellow.
|
|
* Value of 1 for supporting this feature. 0 for not supporting this feature.
|
|
* -1 - on failure (if the device is not capable of the operation or not a Bypass device)
|
|
* Bit feature description
|
|
*
|
|
* 0 BP_CAP The interface is Bypass capable in general
|
|
*
|
|
* 1 BP_STATUS_CAP The interface can report of the current Bypass mode
|
|
*
|
|
* 2 BP_STATUS_CHANGE_CAP The interface can report on a change to bypass mode from
|
|
* the last time the mode was defined
|
|
*
|
|
* 3 SW_CTL_CAP The interface is Software controlled capable for bypass/non bypass modes.
|
|
*
|
|
* 4 BP_DIS_CAP The interface is capable of disabling the Bypass mode at all times.
|
|
* This mode will retain its mode even during power loss and also after
|
|
* power recovery. This will overcome on any bypass operation due to
|
|
* watchdog timeout or set bypass command.
|
|
*
|
|
* 5 BP_DIS_STATUS_CAP The interface can report of the current DIS_BP_CAP
|
|
*
|
|
* 6 STD_NIC_CAP The interface is capable to be configured to operate as standard, non Bypass,
|
|
* NIC interface (have direct connection to interfaces at all power modes)
|
|
*
|
|
* 7 BP_PWOFF_NO_CAP The interface can be in Bypass mode at power off state
|
|
*
|
|
* 8 BP_PWOFF_OFF_CAP The interface can disconnect the Bypass mode at power off state without
|
|
* effecting all the other states of operation
|
|
*
|
|
* 9 BP_PWOFF_CTL_CAP The behavior of the Bypass mode at Power-off state can be controlled by
|
|
* software without effecting any other state
|
|
*
|
|
*10 BP_PWUP_ON_CAP The interface can be in Bypass mode when power is turned on
|
|
* (until the system take control of the bypass functionality)
|
|
*
|
|
*11 BP_PWUP_OFF_CAP The interface can disconnect from Bypass mode when power is turned on
|
|
* (until the system take control of the bypass functionality)
|
|
*
|
|
*12 BP_PWUP_CTL_CAP The behavior of the Bypass mode at Power-up can be controlled by software
|
|
*
|
|
*13 WD_CTL_CAP The interface has watchdog capabilities to turn to Bypass mode when not reset
|
|
* for defined period of time.
|
|
*
|
|
*14 WD_STATUS_CAP The interface can report on the watchdog status (Active/inactive)
|
|
*
|
|
*15 WD_TIMEOUT_CAP The interface can report the time left till watchdog triggers to Bypass mode.
|
|
*
|
|
*16-31 RESERVED
|
|
*
|
|
* **/
|
|
int get_bypass_caps_sd(int if_index);
|
|
|
|
/**
|
|
* get_wd_set_caps - Obtain watchdog timer setting capabilities
|
|
* @if_index: network device index
|
|
*
|
|
* Output:
|
|
*
|
|
* Set of numbers defining the various parameters of the watchdog capable
|
|
* to be set to as described bellow.
|
|
* -1 - on failure (device not support Bypass or it's a slave device)
|
|
*
|
|
* Bit feature description
|
|
*
|
|
* 0-3 WD_MIN_TIME The interface WD minimal time period in 100mS units
|
|
*
|
|
* 4 WD_STEP_TIME The steps of the WD timer in
|
|
* 0 - for linear steps (WD_MIN_TIME * X)
|
|
* 1 - for multiply by 2 from previous step (WD_MIN_TIME * 2^X)
|
|
*
|
|
* 5-8 WD_STEP_COUNT Number of steps the WD timer supports in 2^X
|
|
* (X bit available for defining the value)
|
|
*
|
|
*
|
|
*
|
|
**/
|
|
int get_wd_set_caps_sd(int if_index);
|
|
|
|
/**
|
|
* set_bypass - set Bypass state
|
|
* @if_index: network device index of the controlling device
|
|
* @bypass_mode: bypass mode (1=on, 0=off)
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device not support Bypass or it's a slave device)
|
|
**/
|
|
int set_bypass_sd(int if_index, int bypass_mode);
|
|
|
|
/**
|
|
* get_bypass - Get Bypass mode state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - (off/on) on success
|
|
* -1 - on failure (device not support Bypass or it's a slave device)
|
|
**/
|
|
int get_bypass_sd(int if_index);
|
|
|
|
/**
|
|
* get_bypass_change - Get change of Bypass mode state from last status check
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - (off/on) on success
|
|
* -1 - on failure (device not support Bypass or it's a slave device)
|
|
**/
|
|
int get_bypass_change_sd(int if_index);
|
|
|
|
/**
|
|
* set_dis_bypass - Set Disable Bypass mode
|
|
* @if_index: network device index of the controlling device
|
|
* @dis_bypass: disable bypass(1=dis, 0=en)
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int set_dis_bypass_sd(int if_index, int dis_bypass);
|
|
|
|
/**
|
|
* get_dis_bypass - Get Disable Bypass mode state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - on success (normal Bypass mode/ Disable bypass)
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int get_dis_bypass_sd(int if_index);
|
|
|
|
/**
|
|
* set_bypass_pwoff - Set Bypass mode at power-off state
|
|
* @if_index: network device index of the controlling device
|
|
* @bypass_mode: bypass mode setting at power off state (1=BP en, 0=BP Dis)
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int set_bypass_pwoff_sd(int if_index, int bypass_mode);
|
|
|
|
/**
|
|
* get_bypass_pwoff - Get Bypass mode state at power-off state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - on success (Disable bypass at power off state / normal Bypass mode)
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int get_bypass_pwoff_sd(int if_index);
|
|
|
|
/**
|
|
* set_bypass_pwup - Set Bypass mode at power-up state
|
|
* @if_index: network device index of the controlling device
|
|
* @bypass_mode: bypass mode setting at power up state (1=BP en, 0=BP Dis)
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int set_bypass_pwup_sd(int if_index, int bypass_mode);
|
|
|
|
/**
|
|
* get_bypass_pwup - Get Bypass mode state at power-up state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - on success (Disable bypass at power up state / normal Bypass mode)
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int get_bypass_pwup_sd(int if_index);
|
|
|
|
/**
|
|
* set_bypass_wd - Set watchdog state
|
|
* @if_index: network device index of the controlling device
|
|
* @ms_timeout: requested timeout (in ms units), 0 for disabling the watchdog timer
|
|
* @ms_timeout_set(output): requested timeout (in ms units),
|
|
* that the adapter supports and will be used by the watchdog
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int set_bypass_wd_sd(int if_index, int ms_timeout, int *ms_timeout_set);
|
|
|
|
/**
|
|
* get_bypass_wd - Get watchdog state
|
|
* @if_index: network device index of the controlling device
|
|
* @ms_timeout (output): WDT timeout (in ms units),
|
|
* -1 for unknown wdt status
|
|
* 0 if WDT is disabled
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int get_bypass_wd_sd(int if_index, int *ms_timeout_set);
|
|
|
|
/**
|
|
* get_wd_expire_time - Get watchdog expire
|
|
* @if_index: network device index of the controlling device
|
|
* @ms_time_left (output): time left till watchdog time expire,
|
|
* -1 if WDT has expired
|
|
* 0 if WDT is disabled
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device or unknown wdt status)
|
|
**/
|
|
int get_wd_expire_time_sd(int if_index, int *ms_time_left);
|
|
|
|
/**
|
|
* reset_bypass_wd_timer - Reset watchdog timer
|
|
* @if_index: network device index of the controlling device
|
|
*
|
|
* Output:
|
|
* 1 - on success
|
|
* 0 - watchdog is not configured
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device or unknown wdt status)
|
|
**/
|
|
int reset_bypass_wd_timer_sd(int if_index);
|
|
|
|
/**
|
|
* set_std_nic - Standard NIC mode of operation
|
|
* @if_index: network device index of the controlling device
|
|
* @nic_mode: 0/1 (Default Bypass mode / Standard NIC mode)
|
|
*
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int set_std_nic_sd(int if_index, int nic_mode);
|
|
|
|
/**
|
|
* get_std_nic - Get Standard NIC mode setting
|
|
* @if_index: network device index of the controlling device
|
|
*
|
|
* Output:
|
|
* 0/1 (Default Bypass mode / Standard NIC mode) on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device)
|
|
**/
|
|
int get_std_nic_sd(int if_index);
|
|
|
|
/**
|
|
* set_tx - set transmitter enable/disable
|
|
* @if_index: network device index of the controlling device
|
|
* @tx_state: 0/1 (Transmit Disable / Transmit Enable)
|
|
*
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation )
|
|
**/
|
|
int set_tx_sd(int if_index, int tx_state);
|
|
|
|
/**
|
|
* get_std_nic - get transmitter state (disable / enable)
|
|
* @if_index: network device index of the controlling device
|
|
*
|
|
* Output:
|
|
* 0/1 (ransmit Disable / Transmit Enable) on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass)
|
|
**/
|
|
int get_tx_sd(int if_index);
|
|
|
|
/**
|
|
* set_tap - set TAP state
|
|
* @if_index: network device index of the controlling device
|
|
* @tap_mode: 1 tap mode , 0 normal nic mode
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device not support TAP or it's a slave device)
|
|
**/
|
|
int set_tap_sd(int if_index, int tap_mode);
|
|
|
|
/**
|
|
* get_tap - Get TAP mode state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - (off/on) on success
|
|
* -1 - on failure (device not support TAP or it's a slave device)
|
|
**/
|
|
int get_tap_sd(int if_index);
|
|
|
|
/**
|
|
* get_tap_change - Get change of TAP mode state from last status check
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - (off/on) on success
|
|
* -1 - on failure (device not support TAP or it's a slave device)
|
|
**/
|
|
int get_tap_change_sd(int if_index);
|
|
|
|
/**
|
|
* set_dis_tap - Set Disable TAP mode
|
|
* @if_index: network device index of the controlling device
|
|
* @dis_tap: disable tap(1=dis, 0=en)
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support TAP
|
|
* or it's a slave device)
|
|
**/
|
|
int set_dis_tap_sd(int if_index, int dis_tap);
|
|
|
|
/**
|
|
* get_dis_tap - Get Disable TAP mode state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - on success (normal TAP mode/ Disable TAP)
|
|
* -1 - on failure (device is not capable of the operation ordevice not support TAP
|
|
* or it's a slave device)
|
|
**/
|
|
int get_dis_tap_sd(int if_index);
|
|
|
|
/**
|
|
* set_tap_pwup - Set TAP mode at power-up state
|
|
* @if_index: network device index of the controlling device
|
|
* @bypass_mode: tap mode setting at power up state (1=TAP en, 0=TAP Dis)
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support TAP
|
|
* or it's a slave device)
|
|
**/
|
|
int set_tap_pwup_sd(int if_index, int tap_mode);
|
|
|
|
/**
|
|
* get_tap_pwup - Get TAP mode state at power-up state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - on success (Disable TAP at power up state / normal TAP mode)
|
|
* -1 - on failure (device is not capable of the operation ordevice not support TAP
|
|
* or it's a slave device)
|
|
**/
|
|
int get_tap_pwup_sd(int if_index);
|
|
|
|
/**
|
|
* set_bp_disc - set Disconnect state
|
|
* @if_index: network device index of the controlling device
|
|
* @tap_mode: 1 disc mode , 0 non-disc mode
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device not support Disconnect or it's a slave device)
|
|
**/
|
|
int set_bp_disc_sd(int if_index, int disc_mode);
|
|
|
|
/**
|
|
* get_bp_disc - Get Disconnect mode state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - (off/on) on success
|
|
* -1 - on failure (device not support Disconnect or it's a slave device)
|
|
**/
|
|
int get_bp_disc_sd(int if_index);
|
|
|
|
/**
|
|
* get_bp_disc_change - Get change of Disconnect mode state from last status check
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - (off/on) on success
|
|
* -1 - on failure (device not support Disconnect or it's a slave device)
|
|
**/
|
|
int get_bp_disc_change_sd(int if_index);
|
|
|
|
/**
|
|
* set_bp_dis_disc - Set Disable Disconnect mode
|
|
* @if_index: network device index of the controlling device
|
|
* @dis_tap: disable tap(1=dis, 0=en)
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable ofthe operation ordevice not support Disconnect
|
|
* or it's a slave device)
|
|
**/
|
|
int set_bp_dis_disc_sd(int if_index, int dis_disc);
|
|
|
|
/**
|
|
* get_dis_tap - Get Disable Disconnect mode state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - on success (normal Disconnect mode/ Disable Disconnect)
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Disconnect
|
|
* or it's a slave device)
|
|
**/
|
|
int get_bp_dis_disc_sd(int if_index);
|
|
|
|
/**
|
|
* set_bp_disc_pwup - Set Disconnect mode at power-up state
|
|
* @if_index: network device index of the controlling device
|
|
* @disc_mode: tap mode setting at power up state (1=Disc en, 0=Disc Dis)
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Disconnect
|
|
* or it's a slave device)
|
|
**/
|
|
int set_bp_disc_pwup_sd(int if_index, int disc_mode);
|
|
|
|
/**
|
|
* get_bp_disc_pwup - Get Disconnect mode state at power-up state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - on success (Disable Disconnect at power up state / normal Disconnect mode)
|
|
* -1 - on failure (device is not capable of the operation ordevice not support TAP
|
|
* or it's a slave device)
|
|
**/
|
|
int get_bp_disc_pwup_sd(int if_index);
|
|
|
|
/**
|
|
* set_wd_exp_mode - Set adapter state when WDT expired.
|
|
* @if_index: network device index of the controlling device
|
|
* @bypass_mode: adapter mode (1=tap mode, 0=bypass mode)
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device not support Bypass or it's a slave device)
|
|
**/
|
|
int set_wd_exp_mode_sd(int if_index, int bypass_mode);
|
|
|
|
/**
|
|
* get_wd_exp_mode - Get adapter state when WDT expired.
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - (bypass/tap) on success
|
|
* -1 - on failure (device not support Bypass or it's a slave device)
|
|
**/
|
|
int get_wd_exp_mode_sd(int if_index);
|
|
|
|
/**
|
|
* set_wd_autoreset - reset WDT periodically.
|
|
* @if_index: network device index of the controlling device
|
|
* @bypass_mode: adapter mode (1=tap mode, 0=bypass mode)
|
|
* Output:
|
|
* 1 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device or unknown wdt status)
|
|
**/
|
|
int set_wd_autoreset_sd(int if_index, int time);
|
|
|
|
/**
|
|
* set_wd_autoreset - reset WDT periodically.
|
|
* @if_index: network device index of the controlling device
|
|
* @bypass_mode: adapter mode (1=tap mode, 0=bypass mode)
|
|
* Output:
|
|
* 1 - on success
|
|
* -1 - on failure (device is not capable of the operation ordevice not support Bypass
|
|
* or it's a slave device or unknown wdt status)
|
|
**/
|
|
int get_wd_autoreset_sd(int if_index);
|
|
|
|
/**
|
|
* set_tpl - set TPL state
|
|
* @if_index: network device index of the controlling device
|
|
* @tpl_mode: 1 tpl mode , 0 normal nic mode
|
|
* Output:
|
|
* 0 - on success
|
|
* -1 - on failure (device not support TPL)
|
|
**/
|
|
int set_tpl_sd(int if_index, int tpl_mode);
|
|
|
|
/**
|
|
* get_tpl - Get TPL mode state
|
|
* @if_index: network device index of the controlling device
|
|
* Output:
|
|
* 0/1 - (off/on) on success
|
|
* -1 - on failure (device not support TPL or it's a slave device)
|
|
**/
|
|
int get_tpl_sd(int if_index);
|
|
|
|
int get_bypass_info_sd(int if_index, struct bp_info *bp_info);
|
|
int bp_if_scan_sd(void);
|
|
/*int get_dev_num_sd(void);*/
|