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

    Useful 3G modem 'mode switching' script

    Scheduled Pinned Locked Moved General pfSense Questions
    52 Posts 4 Posters 38.2k 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.
    • J
      jamesc
      last edited by

      We have some progress….

      Fresh install of 2.0.1 full on an old Celeron box to avoid mapping USB devices through to a VMWare VM.
      Modem is a ZTE MF112

      Here's what happens initially when plugging the modem in (not using modeswitch)

      Feb 19 15:55:56 pfSense kernel: umass0: <zte,incorporated 0="" 2="" zte="" wcdma="" technologies="" msm,="" class="" 0,="" rev="" 2.00="" 0.00,="" addr="">on usbus3
      Feb 19 15:55:56 pfSense kernel: umass0:  SCSI over Bulk-Only; quirks = 0x0000
      Feb 19 15:55:57 pfSense kernel: umass0:0:0:-1: Attached to scbus0
      Feb 19 15:55:57 pfSense kernel: (probe0:umass-sim0:0:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0
      Feb 19 15:55:57 pfSense kernel: (probe0:umass-sim0:0:0:0): CAM status: SCSI Status Error
      Feb 19 15:55:57 pfSense kernel: (probe0:umass-sim0:0:0:0): SCSI status: Check Condition
      Feb 19 15:55:57 pfSense kernel: (probe0:umass-sim0:0:0:0): SCSI sense: NOT READY asc:3a,0 (Medium not present)
      Feb 19 15:55:57 pfSense kernel: cd0 at umass-sim0 bus 0 scbus0 target 0 lun 0
      Feb 19 15:55:57 pfSense kernel: cd0: <hspa usb="" scsi="" cd-rom="" 2.31="">Removable CD-ROM SCSI-2 device
      Feb 19 15:55:57 pfSense kernel: cd0: 40.000MB/s transfers
      Feb 19 15:55:57 pfSense kernel: cd0: Attempt to query device size failed: NOT READY, Medium not present</hspa></zte,incorporated> 
      

      No interfaces are available to assign under PPP.

      I then install the port and create a config file for the MF112 and run modeswitch

      Looking for target devices ...
       No devices in target mode or class found
      Looking for default devices ...
         found matching product ID
         adding device
       Found device in default mode, class or configuration (1)
      Accessing device 005 on bus 000 ...
      Getting the current device configuration ...
       OK, got current device configuration (1)
      Using first interface: 0x00
      Using endpoints 0x01 (out) and 0x81 (in)
      Inquiring device details; driver will be detached ...
       Cant't do driver detection and detaching on this platform.
      
      SCSI inquiry data (for identification)
      -------------------------
        Vendor String: HSPA
         Model String: USB SCSI CD-ROM
      Revision String: 2.31
      -------------------------
      
      USB description data (for identification)
      -------------------------
      Manufacturer: ZTE,Incorporated
           Product: ZTE WCDMA Technologies MSM
        Serial No.: P673A3H3GD010000
      -------------------------
      Setting up communication with interface 0
      Using endpoint 0x01 for message sending ...
      Trying to send message 1 to endpoint 0x01 ...
       OK, message successfully sent
      Reading the response to message 1 (CSW) ...
       OK, response successfully read (13 bytes).
      Trying to send message 2 to endpoint 0x01 ...
       OK, message successfully sent
      Reading the response to message 2 (CSW) ...
       Response reading got error -6
       Device is gone, skipping any further commands
      -> Run lsusb to note any changes. Bye.
      
      

      I then have two new PPP interfaces /dev/cuaU0.1 and /dev/cuaU0.2

      Unfortunately, I have no simcard to test any further :(

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

        Ah, looks promising.  :)
        You can try talking to the modem with cu or tip like I did. If it responds to AT commands I would expect it to work.

        Steve

        1 Reply Last reply Reply Quote 0
        • J
          jamesc
          last edited by

          The next thing to try is adding the below line to the firewall config to test whether pfSense will switch the modem before it does the PPP dial:

          <shellcmd>usb_modeswitch -c /usr/local/etc/modem.txt</shellcmd>

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

            If not then try <earlyshellcmd>instead.

            Steve</earlyshellcmd>

            1 Reply Last reply Reply Quote 0
            • J
              jamesc
              last edited by

              It does respond to AT commands on cuaU0.2  :)

              My question is, what is cuaU0.1 which is also available to assign under PPP

              Also, when I assign the PPP to an interface, I also see cuaU0.0 and cuau0 in the 'Modem Port' dropdown list so i'm a little confused  ???

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

                Probably due to the way pfSense finds the serial ports to display:

                $serialports = pfSense_get_modem_devices();
                
                

                I can't find that function but if it relies on, for example, sysctl dev.u3g then they won't appear there.

                The reason that the modem provides several serial ports is not obvious to me but it seems it's possible to get stats from the modem on one interface whilst connected via another, signal strength, baud rate etc.

                Steve

                1 Reply Last reply Reply Quote 0
                • J
                  jamesc
                  last edited by

                  Thanks Steve.

                  I found a simcard, there's no credit on it but it still connects and gets an IP address.

                  I've tried both the shellcmd and earlyshellcmd options but sometimes there is a delay until the actual switch occurs.  The boot sequence continues regardless, the PPP interface is brought up but the modem is not yet ready so a WAN connection isn't established.  If I go into the GUI and manually hit connect, PPP is dialled and the WAN comes online.

                  Any idea of how we can delay bringing up PPP until we know the modem has successfully switched?

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

                    What happens when it tries to dial out before the interface is switched?
                    I'm surprised that it doesn't just keep trying.
                    Maybe using dial-on demand or idle time out.

                    You could write a script that ran usb_modeswitch, waited and then called the appropriate interface connect function.

                    Steve

                    1 Reply Last reply Reply Quote 0
                    • J
                      jamesc
                      last edited by

                      It doesnt do anything, the box continues its boot process as if no modem was plugged in. I see the modem details flash up on the console towards the end of the boot process but PPP has already initialised at this point (without seeing the modem) so i suspect it wont keep on attempting a dial out because as far it's concerned, no modem was detected at the time of initialisation, I hope that makes sense!

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

                        Yes I see exactly what you mean.
                        Would probably be best to use an rc script then.
                        This is just a guess but perhaps:

                        
                        #!/bin/sh
                        /usr/local/sbin/usb_modeswitch -c yourmodem.txt
                        sleep 5
                        /etc/rc.reload_interfaces
                        
                        

                        Try issuing a /etc/rc.reload_interfaces and see if it finds the modem and connects.

                        Steve

                        1 Reply Last reply Reply Quote 0
                        • J
                          jamesc
                          last edited by

                          I had just finished creating a similar script and was looking for a command that would restart PPP, the reload_interfaces seems to do the trick nicely, thank you.

                          1 Reply Last reply Reply Quote 0
                          • J
                            jly2680
                            last edited by

                            how can i put my usbmode_switch script in startup??i have bandluxe 21 mbps 3g modem and successfully flip it to modem mode using usb_modeswitch..I want to connect my modem's ppp  in start up..thanks

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

                              If it's an RC script, as I detailed above, put it in /usr/local/etc/rc.d and it will run at boot.

                              Steve

                              1 Reply Last reply Reply Quote 0
                              • J
                                jly2680
                                last edited by

                                i already put my script in /usr/local/etc/rc.d/ but when i reboot pfsense,,ppp dials in fiirst before flipping my usb modem,thus i need to dial my ppp manually..i want to flip my modem first then ppp dials in..TIA

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

                                  Yes Jamesc experienced that problem above.
                                  Doesn't it redial when you reload the interfaces in the script?

                                  Steve

                                  1 Reply Last reply Reply Quote 0
                                  • J
                                    jly2680
                                    last edited by

                                    thanks..reload interfaces did the trick..now i will add 1 more different usb modem.. :)

                                    1 Reply Last reply Reply Quote 0
                                    • J
                                      jly2680
                                      last edited by

                                      problem occurs: persistent disconnections..i cant make my modem to hold for an hour or so..my ppp connection disconnects  every 10 seconds..i try to use my 3g modem directly with my laptop but never had a connection hangup..

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

                                        Is it exactly 10 seconds every time? This might indicate some sort of ppp error. Or more random?
                                        What do you see in the logs? Does it do this if you setup the connection manually instead of using the script?
                                        Have you set the PPP session to be 'always on' (idle timeout = 0, which is the default setting)

                                        using rc.reload_interfaces seemed a bit crude when I suggested it earlier and it still does. It maybe that it is causing some other undesired consequence. It would be much better to simply reload WAN or indeed just have it redial. Sadly I'm not sufficiently familiar with the code to suggest anything better.  :(

                                        Steve

                                        Edit: rc.linkup WAN up (or should that be 'up WAN') perhaps?  :-\ Complete guesswork!

                                        1 Reply Last reply Reply Quote 0
                                        • J
                                          jly2680
                                          last edited by

                                          i think ppp error side?

                                          Mar 5 23:07:52	ppp: [opt2] IPCP: SendConfigReq #3
                                          Mar 5 23:07:52	ppp: [opt2] IPADDR 176.225.134.77
                                          Mar 5 23:07:52	ppp: [opt2] IPCP: rec'd Configure Ack #3 (Ack-Sent)
                                          Mar 5 23:07:52	ppp: [opt2] IPADDR 176.225.134.77
                                          Mar 5 23:07:52	ppp: [opt2] IPCP: state change Ack-Sent --> Opened
                                          Mar 5 23:07:52	ppp: [opt2] IPCP: LayerUp
                                          Mar 5 23:07:52	ppp: [opt2] 176.225.134.77 -> 10.0.0.1
                                          Mar 5 23:07:52	ppp: [opt2] IFACE: Up event
                                          Mar 5 23:08:36	ppp: Multi-link PPP daemon for FreeBSD
                                          Mar 5 23:08:36	ppp:
                                          Mar 5 23:08:36	ppp: process 28199 started, version 5.5 (root@FreeBSD_8.0_pfSense_2.0-snaps.pfsense.org 10:25 12-Oct-2011)
                                          Mar 5 23:08:36	ppp: caught fatal signal term
                                          Mar 5 23:08:36	ppp: [opt2] IFACE: Close event
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: Close event
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: state change Opened --> Closing
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: SendTerminateReq #4
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: LayerDown
                                          Mar 5 23:08:36	ppp: waiting for process 16679 to die...
                                          Mar 5 23:08:36	ppp: [opt2] IFACE: Down event
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: rec'd Terminate Ack #4 (Closing)
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: state change Closing --> Closed
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: LayerFinish
                                          Mar 5 23:08:36	ppp: [opt2] Bundle: No NCPs left. Closing links...
                                          Mar 5 23:08:36	ppp: [opt2] Bundle: closing link "opt2_link0"...
                                          Mar 5 23:08:36	ppp: [opt2_link0] Link: CLOSE event
                                          Mar 5 23:08:36	ppp: [opt2_link0] LCP: Close event
                                          Mar 5 23:08:36	ppp: [opt2_link0] LCP: state change Opened --> Closing
                                          Mar 5 23:08:36	ppp: [opt2_link0] Link: Leave bundle "opt2"
                                          Mar 5 23:08:36	ppp: [opt2] Bundle: Status update: up 0 links, total bandwidth 9600 bps
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: Close event
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: Down event
                                          Mar 5 23:08:36	ppp: [opt2] IPCP: state change Closed --> Initial
                                          Mar 5 23:08:36	ppp: [opt2_link0] LCP: SendTerminateReq #3
                                          Mar 5 23:08:36	ppp: [opt2_link0] LCP: LayerDown
                                          Mar 5 23:08:36	ppp: [opt2_link0] LCP: rec'd Terminate Ack #3 (Closing)
                                          Mar 5 23:08:36	ppp: [opt2_link0] LCP: state change Closing --> Closed
                                          Mar 5 23:08:36	ppp: [opt2_link0] LCP: LayerFinish
                                          Mar 5 23:08:36	ppp: [opt2_link0] Link: DOWN event
                                          Mar 5 23:08:36	ppp: [opt2_link0] LCP: Down event
                                          Mar 5 23:08:36	ppp: [opt2_link0] LCP: state change Closed --> Initial
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • J
                                            jly2680
                                            last edited by

                                            /etc/rc.reload_interfaces in my script causes my 3g ppp connection to restart every 10-20 secs..

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