Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    LAN Driver, Qualcomm Atheros AR8171

    Scheduled Pinned Locked Moved Problems Installing or Upgrading pfSense Software
    43 Posts 6 Posters 17.3k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      davros123
      last edited by

      Hi arrmo,

      I dad some issues with my PCI wifi card so I decided to take the plunge and move to 2.2 ALPHA.

      The driver installed without issues (just temporarily loaded it using kldload).

      I can not create a VLAN on the alx0 interface.

      Can you pls. check to see if you can create VLANs on your interface?

      EDIT: looking at the nic with ifconfig, it's not supported…ie does not show  VLAN_HWTAGGING

      1 Reply Last reply Reply Quote 0
      • stephenw10S
        stephenw10 Netgate Administrator
        last edited by

        You don't need to have hardware tagging on the NIC to use VLANs it just offloads some work from the driver/CPU. In fact in some cases VLANs work better with it disabled. For example: https://redmine.pfsense.org/issues/2577

        The driver has to know how to handle VLANs though, perhaps this doesn't yet. It's a development driver.
        Edit: A quick glance through the code seems to show plenty of VLAN references.

        Steve

        1 Reply Last reply Reply Quote 0
        • D
          davros123
          last edited by

          Hi Stephen.

          Thanks for the reply (and for trawling the code).

          Unfortunately the interface still does not show as a valid interface when defining VLAN's (em0 does, but not the alx).

          1 Reply Last reply Reply Quote 0
          • B
            balance
            last edited by

            hi there I got the asrock h81m-itx

            thx for the driver arrmo

            anyone know how to inject the driver into pfsense for install? never compile anything. anyone can point me into the right direction. plan to add a intel nic to the pci-e of the board and that will give me to two nic as I need :D

            1 Reply Last reply Reply Quote 0
            • stephenw10S
              stephenw10 Netgate Administrator
              last edited by

              Easiest way to get this installed would be to add the Intel NIC first and use that as the only assigned interface. Then add the new driver and the Atheros NIC will be seen. You can always change the NIC assignment afterwards if you prefer. Alternatively you can probably put the driver on a USB stick, mount the stick and copy it across manually.

              Steve

              1 Reply Last reply Reply Quote 0
              • arrmoA
                arrmo
                last edited by

                Hi,

                It seems that alx is now officially supported in FreeBSD (see https://github.com/markjdb/alx-freebsd/commit/74500d38295e6a9c6e476ecab7be7a052b9620da).

                But this doesn't seem to be in the latest v2.2-RC … is there a reason why not?

                Thanks!

                1 Reply Last reply Reply Quote 0
                • stephenw10S
                  stephenw10 Netgate Administrator
                  last edited by

                  Because it didn't make it into stable before the cut-off for 10.1 unfortunately.
                  You can still compile the newer kernel module from 10-stable and override the in kernel driver in 10.1 though.

                  Steve

                  1 Reply Last reply Reply Quote 0
                  • arrmoA
                    arrmo
                    last edited by

                    Hi,

                    Thanks for the info! Asking more, only because I'm trying to understand - not meant to be negative at all, please don't take it that way.

                    Here is the change for 10 (right?) … http://freshbsd.org/commit/freebsd/r273366. Isn't this before the 10.1 cutoff? Or perhaps not, again - trying to understand.

                    I'd be more than happy to build the new module, just not sure where to get it from ... :(.

                    Thanks!!!

                    1 Reply Last reply Reply Quote 0
                    • stephenw10S
                      stephenw10 Netgate Administrator
                      last edited by

                      So stable was copied to releng for 10.1 on the 3/10/14:
                      https://svnweb.freebsd.org/base?view=revision&revision=272461

                      A few weeks before the support was added to alc(4). It's not in 10.1:
                      https://svnweb.freebsd.org/base/release/10.1.0/sys/dev/alc/if_alc.c?view=markup

                      Hence it's not in pfSense 2.2.
                      I imagine it would very easy to include it if some key piece of hardware was using the AR8171 but I doubt you'd be able to persuade the devs to put it into 2.2 now we're in RC.

                      If there's an ISO for a 10-stable snapshot available you can just boot that up (in a VM perhaps) and build the kernel module. If not you may have to copy the more recent code into a 10.1 install and build there instead.
                      Once you have the updated kernel module copy it to /boot/modules in the pfSense and add the line:

                      if_alc_load="yes"
                      

                      To the file /boot/loader.conf.local
                      That will load the module at boot time and override the in kernel driver. Hopefully!  ;)

                      Steve

                      1 Reply Last reply Reply Quote 0
                      • arrmoA
                        arrmo
                        last edited by

                        Makes sense, and thanks for taking the time to explain - much appreciated!

                        I did have a VM for FreeBSD, that's how I built the "older" alx driver (earlier in this thread). I say "did" because I removed it earlier today, it was having all sorts of issues … :(. But the older driver works, not much reason to build a newer add-on, just thought I could perhaps remove the extra file (and use the driver in the kernel).

                        Thanks again!

                        1 Reply Last reply Reply Quote 0
                        • A
                          Alex 0
                          last edited by

                          Hello,
                          maybe i just misunderstood some point of the conversation (I'm really new to FreeBSD), but I'm really struggling with that driver. I'm using pfSense 2.1.5 so I can't take the mere driver you've attached on one of your answer (exec format error if I try to kldload it). So I installed a VM with FreeBSD 8.3 to compile it but I end with a load of errors :
                          Warning: Object directory not changed from original /root/alx-freebsd-master
                          cc -O2 -pipe -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc  -I. -I@ -I@/contrib/altq -finline-limit=8000 –param inline-unit-growth=100 --param large-function-growth=1000 -fno-common -g -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone  -mfpmath=387 -mno-sse -mno-sse2 -mno-sse3 -mno-mmx -mno-3dnow  -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fstack-protector -std=iso9899:1999 -fstack-protector -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual  -Wundef -Wno-pointer-sign -fformat-extensions -c if_alx.c
                          In file included from if_alx.c:54:
                          alx_hw.h:512: error: expected specifier-qualifier-list before 'bool'
                          alx_hw.h:604: error: expected declaration specifiers or '...' before 'bool'
                          alx_hw.h:606: error: expected declaration specifiers or '...' before 'bool'
                          alx_hw.h:606: error: expected declaration specifiers or '...' before 'bool'
                          alx_hw.h:608: error: expected declaration specifiers or '...' before 'bool'
                          alx_hw.h:616: error: expected declaration specifiers or '...' before 'bool'
                          alx_hw.h:624: error: expected '=', ',', ';', 'asm' or 'attribute' before 'alx_phy_configed'
                          alx_hw.h:626: error: expected declaration specifiers or '...' before 'bool'
                          alx_hw.h:627: error: expected declaration specifiers or '...' before 'bool'
                          alx_hw.h:656: error: expected '=', ',', ';', 'asm' or 'attribute' before 'alx_get_phy_info'
                          if_alx.c: In function 'alx_identify_hw':
                          if_alx.c:479: error: 'struct alx_hw' has no member named 'ptrn_ofs'
                          if_alx.c:480: error: 'struct alx_hw' has no member named 'max_ptrns'
                          if_alx.c:482: error: 'struct alx_hw' has no member named 'ptrn_ofs'
                          if_alx.c:483: error: 'struct alx_hw' has no member named 'max_ptrns'
                          if_alx.c: In function 'alx_init_sw':
                          if_alx.c:530: error: 'struct alx_hw' has no member named 'sleep_ctrl'
                          if_alx.c:535: error: 'struct alx_hw' has no member named 'link_up'
                          if_alx.c:535: error: 'false' undeclared (first use in this function)
                          if_alx.c:535: error: (Each undeclared identifier is reported only once
                          if_alx.c:535: error: for each function it appears in.)
                          if_alx.c:536: error: 'struct alx_hw' has no member named 'link_duplex'
                          if_alx.c:537: error: 'struct alx_hw' has no member named 'link_speed'
                          if_alx.c:538: error: 'struct alx_hw' has no member named 'adv_cfg'
                          if_alx.c:541: error: 'struct alx_hw' has no member named 'flowctrl'
                          if_alx.c:550: error: 'struct alx_hw' has no member named 'is_fpga'
                          if_alx.c: In function 'alx_reset':
                          if_alx.c:944: error: 'bool' undeclared (first use in this function)
                          if_alx.c:944: error: expected ';' before 'phy_cfged'
                          if_alx.c:951: error: 'phy_cfged' undeclared (first use in this function)
                          cc1: warnings being treated as errors
                          if_alx.c:951: warning: implicit declaration of function 'alx_phy_configed'
                          if_alx.c:951: warning: nested extern declaration of 'alx_phy_configed'
                          if_alx.c:953: error: 'struct alx_hw' has no member named 'hib_patch'
                          if_alx.c:953: error: too many arguments to function 'alx_reset_phy'
                          if_alx.c: In function 'alx_update_link':
                          if_alx.c:965: error: 'bool' undeclared (first use in this function)
                          if_alx.c:965: error: expected ';' before 'link_up'
                          if_alx.c:973: error: 'link_up' undeclared (first use in this function)
                          if_alx.c:973: error: too many arguments to function 'alx_get_phy_link'
                          if_alx.c:977: error: 'struct alx_hw' has no member named 'link_up'
                          if_alx.c:981: error: 'struct alx_hw' has no member named 'link_speed'
                          if_alx.c:981: error: 'struct alx_hw' has no member named 'link_duplex'
                          if_alx.c:982: error: 'prev_link_up' undeclared (first use in this function)
                          if_alx.c:982: error: 'struct alx_hw' has no member named 'link_up'
                          if_alx.c:984: error: 'struct alx_hw' has no member named 'link_up'
                          if_alx.c:989: error: 'struct alx_hw' has no member named 'link_duplex'
                          if_alx.c:990: error: 'struct alx_hw' has no member named 'link_speed'
                          if_alx.c:990: error: 'struct alx_hw' has no member named 'link_duplex'
                          if_alx.c:992: error: 'struct alx_hw' has no member named 'link_speed'
                          if_alx.c:992: error: too many arguments to function 'alx_post_phy_link'
                          if_alx.c:993: error: too many arguments to function 'alx_enable_aspm'
                          if_alx.c:998: error: 'struct alx_hw' has no member named 'link_duplex'
                          if_alx.c:999: error: 'struct alx_hw' has no member named 'link_speed'
                          if_alx.c:1010: error: too many arguments to function 'alx_configure_rss'
                          if_alx.c:1011: error: 'false' undeclared (first use in this function)
                          if_alx.c:1011: error: too many arguments to function 'alx_enable_aspm'
                          if_alx.c:1012: error: too many arguments to function 'alx_post_phy_link'
                          if_alx.c: In function 'alx_media_status':
                          if_alx.c:1231: error: 'struct alx_hw' has no member named 'link_up'
                          if_alx.c:1238: error: 'struct alx_hw' has no member named 'link_duplex'
                          if_alx.c:1247: error: 'struct alx_hw' has no member named 'link_duplex'
                          if_alx.c:1251: error: 'struct alx_hw' has no member named 'link_speed'
                          if_alx.c:1263: error: 'struct alx_hw' has no member named 'link_speed'
                          if_alx.c: In function 'alx_start_locked':
                          if_alx.c:1388: error: 'struct alx_hw' has no member named 'link_up'
                          if_alx.c: In function 'alx_attach':
                          if_alx.c:1437: error: 'bool' undeclared (first use in this function)
                          if_alx.c:1437: error: expected ';' before 'phy_cfged'
                          if_alx.c:1478: error: 'phy_cfged' undeclared (first use in this function)
                          if_alx.c:1480: error: 'struct alx_hw' has no member named 'hib_patch'
                          if_alx.c:1480: error: too many arguments to function 'alx_reset_phy'
                          if_alx.c:1490: error: 'struct alx_hw' has no member named 'adv_cfg'
                          if_alx.c:1490: error: 'struct alx_hw' has no member named 'flowctrl'
                          if_alx.c:1514: warning: implicit declaration of function 'alx_get_phy_info'
                          if_alx.c:1514: warning: nested extern declaration of 'alx_get_phy_info'
                          *** Error code 1

                          Stop in /root/alx-freebsd-master.

                          I alos tried to recompile the kernel of the VM adding "device miibus" and "device alc" in the kernel config, but when I try to load the generated driver in pfSense, it tells me that it is already existing (which is true after verifying with kldstat -v). So I tried to stop it to be able to put the new driver (kldunload), the fact is it merely freeze the system and I can't do anything ecept reloading my ssh connection to the pfSense machine (it freezes the system even if I work on it with a keyboard and a screen). I'm quite sure I'm doing something wrong, but I can't figure what. Any suggestion ?

                          1 Reply Last reply Reply Quote 0
                          • arrmoA
                            arrmo
                            last edited by

                            Hi,

                            The VM that I used to build it was PC-BSD … a completely separate machine (with all the needed build tools, those don't come with pfSense).

                            Hope that helps!

                            1 Reply Last reply Reply Quote 0
                            • A
                              Alex 0
                              last edited by

                              Hi arrmo,
                              thx for your help, I tried to compile the driver under PC-BSD, it compiled but when I try to load the module on pfSense I have a Exec Format Error.
                              Edit : my fault, I do not have taken the PC BSD release corresponding to FRee BSD 8.3 but the latest. I will try again tomorrow.

                              1 Reply Last reply Reply Quote 0
                              • A
                                Alex 0
                                last edited by

                                Hi,
                                I finally suceeded compiling the driver under FreebSD 8.3 on VM, including stdbool.h in alx_hw.h. My Atheros AR8171 is now recognized by pfSense. Thanks for your help :)

                                1 Reply Last reply Reply Quote 0
                                • arrmoA
                                  arrmo
                                  last edited by

                                  Excellent, glad to hear it. Have fun!

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    Alex 0
                                    last edited by

                                    Well, maybe I've spoken too fast… The ethernet interface is recognized, but trying to connect it, I see "statuts : no carrier" when I do a ifconfig on alx0, even if it's directly plugged to a SFRBox with a ethernet wire. I will continue to search why I have this issue

                                    1 Reply Last reply Reply Quote 0
                                    • stephenw10S
                                      stephenw10 Netgate Administrator
                                      last edited by

                                      Hmm, disappointing. Do you see link leds at either end?

                                      1 Reply Last reply Reply Quote 0
                                      • A
                                        Alex 0
                                        last edited by

                                        Yes, leds are ON on the box and the pfSense, blinking from time to time.

                                        1 Reply Last reply Reply Quote 0
                                        • arrmoA
                                          arrmo
                                          last edited by

                                          Very odd … :(. Seems like it's up, but seems to say no. What does media say (under ifconfig)?

                                          1 Reply Last reply Reply Quote 0
                                          • stephenw10S
                                            stephenw10 Netgate Administrator
                                            last edited by

                                            With 2.2 just around the corner (hopefully) at this point I have to say it's probably not worth putting too much effort into. Just run 2.2RC with the other kernel module.
                                            Since the alx driver was developed against FreeBSD 10 it may require significant backporting to make it work with 8.3.  :-\

                                            Steve

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.