Share your knowledge at the LQ Wiki.
Go Back > Forums > Linux Forums > Linux - Hardware
User Name
Linux - Hardware This forum is for Hardware issues.
Having trouble installing a piece of hardware? Want to know if that peripheral is compatible with Linux?


  Search this Thread
Old 05-12-2013, 07:10 PM   #1
LQ Newbie
Registered: Dec 2006
Location: Great NW
Distribution: Gentoo
Posts: 15

Rep: Reputation: 0
Silicom Dual Port 1 Gig Fiber Bypass cards?

I have a server that has two dual port Silicom 1Gig Fiber bypass cards in it that I would like to use. They are recognized by the igb driver just fine:

(from lspci -k)
08:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
Subsystem: Silicom Ltd. Device 0301
Kernel driver in use: igb
08:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
Subsystem: Silicom Ltd. Device 0301
Kernel driver in use: igb

And I enabled staging drivers and the bpctl_mod and Bypass modules, which found the cards bypass:

[ 201.233759] bpctl_mod: module is from the staging directory, the quality is unknown, you have been warned.
[ 201.234004] Silicom Bypass-SD Control driver v9.0.4
[ 201.234798] PEG2BPFI6 found, firmware version: 0xa8
[ 201.261095] PEG2BPFI6 found, firmware version: 0xa8
[ 415.859024] bypass: module is from the staging directory, the quality is unknown, you have been warned.
[ 415.859176]

But I am unable to get the cards out of "bypass" mode so that I may use them. A friend said I should have had a /proc/bypass variable created when the bypass module loaded, but none was created.

Has anyone worked with this card? (I saw that there is also a command utility for bpctl, but can't find the source code.)

I am running:
Linux bertha 3.9.0-gentoo #4 SMP Fri May 10 09:22:48 PDT 2013 x86_64 Intel(R) Xeon(R) CPU X 000 @ 3.33GHz GenuineIntel GNU/Linux

Thanks for any leads on how this might work.

Old 05-15-2013, 09:13 AM   #2
Senior Member
Registered: Sep 2009
Location: Orange County, CA
Distribution: Kubuntu x64, Raspbian, CentOS
Posts: 1,855
Blog Entries: 36

Rep: Reputation: 455Reputation: 455Reputation: 455Reputation: 455Reputation: 455
I guess I'll take a crack at this though I don't have experience with your hardware nor this module so it is best you read the sources for better understanding.

Here's the Silicom driver in the Linux Kernel sources: drivers/staging/silicom

In the file bp_mod.c:7339 you have the BP_PROC_DIR defined as "bypass". bp_mod.c:7410 bp_proc_create(void) is what creates the proc directory structure.

Your friend is partially right. It's not a variable or file that is being created in /proc but a directory tree.
ls -l /proc | grep bypass
There should be a /proc/bypass directory.

bp_proc.c is what contains the code that creates the device commands in the proc directory. Here's a list of commands that should be found within the /proc/bypass directory (they should be files located there) as listed in bp_proc.c:44.
#define BYPASS_INFO_ENTRY_SD     "bypass_info"
#define BYPASS_SLAVE_ENTRY_SD    "bypass_slave"
#define BYPASS_CAPS_ENTRY_SD     "bypass_caps"
#define WD_SET_CAPS_ENTRY_SD     "wd_set_caps"
#define BYPASS_ENTRY_SD          "bypass"
#define BYPASS_CHANGE_ENTRY_SD   "bypass_change"
#define BYPASS_WD_ENTRY_SD       "bypass_wd"
#define WD_EXPIRE_TIME_ENTRY_SD  "wd_expire_time"
#define RESET_BYPASS_WD_ENTRY_SD "reset_bypass_wd"
#define DIS_BYPASS_ENTRY_SD      "dis_bypass"
#define BYPASS_PWUP_ENTRY_SD     "bypass_pwup"
#define BYPASS_PWOFF_ENTRY_SD     "bypass_pwoff"
#define STD_NIC_ENTRY_SD         "std_nic"
#define STD_NIC_ENTRY_SD         "std_nic"
#define TAP_ENTRY_SD             "tap"
#define TAP_CHANGE_ENTRY_SD      "tap_change"
#define DIS_TAP_ENTRY_SD         "dis_tap"
#define TAP_PWUP_ENTRY_SD        "tap_pwup"
#define TWO_PORT_LINK_ENTRY_SD   "two_port_link"
#define WD_EXP_MODE_ENTRY_SD     "wd_exp_mode"
#define WD_AUTORESET_ENTRY_SD    "wd_autoreset"
#define TPL_ENTRY_SD             "tpl"
#define WAIT_AT_PWUP_ENTRY_SD    "wait_at_pwup"
#define HW_RESET_ENTRY_SD        "hw_reset"
#define DISC_ENTRY_SD             "disc"
#define DISC_CHANGE_ENTRY_SD      "disc_change"
#define DIS_DISC_ENTRY_SD         "dis_disc"
#define DISC_PWUP_ENTRY_SD        "disc_pwup"
So if you list the /proc/bypass directory you should see a file for each one of those commands.

The README mentions the binary utility /bin/bpctl. Here's the manufacturer website on Dual Port Gigabit Bypass Adapters. The drivers and documentation is behind a login gateway. I recommend creating an account there to get access to them directly from the manufacturer because it is likely they have the /bin/bpctl binary there.

It's a start. I'll keep looking and see if I can find more info. Do an lsmod in your system and see if the module is loaded. If not compile the module from source and insmod it.
Old 08-29-2014, 01:58 PM   #3
LQ Newbie
Registered: Aug 2014
Posts: 1

Rep: Reputation: Disabled
Hardware option

I have a couple of these cards and didn't want to go down the software route (too hard, no clear instructions). This post is a hardware hack to just use the nic ports are regular nics:

On the top of the card, there are 8 Panasonic TXS2S2-L-4.5V non-latching, double pole relays. Each relay handles 2 of ethernet's 8 wires so only 4 are required. There are two banks of 4, the first 4 connect the ethernet ports together. The next 4 connect the network controller to the ports. They are in direct bypass mode when the relays are not energized. This means without software control, this is just a bypass and the interfaces cannot send/receive traffic. My hardware hack is to energize the relays with a USB cable. This hack is likely to be applicable to other nics.

Step 1:
Flip the ethernet controller over, remove the sticker that starts with 'Silicom P/N: PEG2BPI6...". Underneath that sticker, if you look carefully, you will see vias (0.2mm circles) that are in a pattern like the following ascii diagram. These vias are directly under the relays and match up to the relay's pinouts. Here's an ascii diagram, 'o's are the vias:

o o    o o    o o    o o
o o    o o    o o    o o
o o    o o    o o    o o

o o    o o    o o    o o
According to the spec sheet, the last two connectors are the ones that control the relay. Here they are again with the polarization, here it is:

o o    o o    o o    o o
o o    o o    o o    o o
o o    o o    o o    o o

o+o-   o o    o o    o o
If you apply 5v (from usb or another source) to the bottom left and ground the bottom right connector, you should hear a loud click. This is the relay switching. Removing the power will turn the relay off, back into the bypass position again a click should be audible. If you hear no click, your polarization is wrong.

What I did was connect the positive from the bottom bank to the top bank, and then connected the ground from bottom to top. Each bank has 4 relays connected together so powering one relay in a bank powers them all on. With two wires connecting the two banks, powering one bank powers both. The pipe symbols below represent the wire I added:

o o    o o    o o    o o
o o    o o    o o    o o
o o    o o    o o    o o

o o    o o    o+o-   o o
               | |
               | |
               | |
o o    o o    o|o|   o o
o o    o o    o|o|   o o
o o    o o    o|o|   o o
               | |
o o    o o    o+o-   o o
I chose to use this center-right row because the vias were best exposed there. Others have components close to the vias, there are also some vias that are not exposed on the bottom row. It doesn't really matter which ones you use. Consider you can test this completely with the card outside a PC, there is no requirement for this to be inside your PCIE slot to test it. The final step for me was connecting a usb cable's +5v and ground to these two wires. once done, my interfaces worked!

eth2 Link encap:Ethernet HWaddr 00:e0:ed:19:39:5f
inet addr: Bcast: Mask:
inet6 addr: fe80::2e0:edff:fe19:395f/64 Scope:Link
RX packets:593 errors:0 dropped:0 overruns:0 frame:0
TX packets:491 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:134612 (134.6 KB) TX bytes:91962 (91.9 KB)

04:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
Subsystem: Silicom Ltd. Device 0300
Flags: bus master, fast devsel, latency 0, IRQ 17
Memory at df240000 (32-bit, non-prefetchable) [size=128K]
Memory at df260000 (32-bit, non-prefetchable) [size=128K]
I/O ports at e000 [size=32]
Memory at df2c4000 (32-bit, non-prefetchable) [size=16K]
Expansion ROM at df420000 [disabled] [size=128K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
Capabilities: [70] MSI-X: Enable+ Count=10 Masked-
Capabilities: [a0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number 00-e0-ed-ff-ff-19-39-5e
Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
Kernel driver in use: igb

mint 17 / 3.13.0-24-generic kernel.

Last edited by rskrda; 08-29-2014 at 02:03 PM. Reason: corrected the ascii diagram


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
PCMCIA Silicom dual serial port problem Camiel Linux - Hardware 1 10-16-2010 11:29 PM
IPCop not finding all ports on Intel PRO/1000 MT Dual port cards sabens Linux - Hardware 1 01-12-2009 09:33 PM
Bypass port block security ramesh.mimit Linux - Security 3 12-25-2008 01:12 PM
120 gig HD Running XP - Need DUAL BOOT Caprice_SS Fedora 11 12-08-2003 07:48 PM
Fiber Port Types? troyzeng Linux - Hardware 0 10-08-2003 03:59 AM > Forums > Linux Forums > Linux - Hardware

All times are GMT -5. The time now is 01:36 AM.

Main Menu
Write for LQ is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration