[Replicant] release candidate for Replicant 6.0004

Jozef Macko j.macko.sk at gmail.com
Wed Oct 9 22:15:56 UTC 2019


Good afternoon,

Would like to know if you prepare one day release of Replicate with base of
Android 9 or 10, please?

@+


Dňa st 9. 10. 2019, 14:00 <replicant-request at osuosl.org> napísal(a):

> Send Replicant mailing list submissions to
>         replicant at osuosl.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         https://lists.osuosl.org/mailman/listinfo/replicant
> or, via email, send a message with subject or body 'help' to
>         replicant-request at osuosl.org
>
> You can reach the person managing the list at
>         replicant-owner at osuosl.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Replicant digest..."
>
>
> Today's Topics:
>
>    1. Re: [PATCH] Native Android WiFi with external dongle
>       (Joonas Kylm?l?)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Wed, 9 Oct 2019 00:47:28 +0300
> From: Joonas Kylm?l? <joonas.kylmala at iki.fi>
> To: Belgin ?tirbu <belginstirbu at hotmail.com>
> Cc: Denis 'GNUtoo' Carikli <GNUtoo at cyberdimension.org>,
>         "replicant at osuosl.org" <replicant at osuosl.org>
> Subject: Re: [Replicant] [PATCH] Native Android WiFi with external
>         dongle
> Message-ID: <11d61e59-814c-7584-78f1-e205ef74a6af at iki.fi>
> Content-Type: text/plain; charset=windows-1252
>
> Hi Belgin,
>
> would you be able to make a new version of this patch within this week?
> We are hoping to make a release candidate for Replicant 6.0004 next
> Monday and release the following Sunday.
>
> Joonas
>
> Denis 'GNUtoo' Carikli:
> > Hi,
> >
> > I'm really sorry for the delay.
> >
> > Thanks a lot for working on adding native WiFi support for external
> > dongles.
> >
> > I've some comments on the patch below, in order to improve it (and send
> > a second version when this is done).
> >
> >> Native Android WiFi with external dongle
> > Maybe something like would be better:
> > 'Add native Android support for external WiFi dongles'
> >
> > On Fri, 30 Aug 2019 18:26:58 +0000
> > Belgin ?tirbu <belginstirbu at hotmail.com> wrote:
> >
> >> This patch allows choosing to use the proprietary firmware blob and
> >> internal WiFi device if the proprietary firmware blob is found.
> >> If proprietary firmware is not found, the patch causes Android's
> >> WiFi State Machine to try to use the external dongle.
> > I think that the 'blob' work is unnecessary.
> > Something like that could be better:
> >> With this patch, if the nonfree firmware is found, the internal WiFi
> >> is used, otherwise the WiFi state machine tries to use the external
> >> WiFi adapter.
> >
> >> The problem with this patch is that Android's WiFi State Machine
> >> tries to enable Bluetooth and IP filters, causing errors in
> >> wpa_supplicant, and after 5 errors, wpa_supplicant thinks
> >> the driver hanged so it disconnects. The workaround to this
> >> is to add a boolean in the WifiStateMachine class that
> >> represents if the connection is via dongle, and avoid
> >> enabling Bluetooth and IP filters in case it is.
> > Here it doesn't try to enable Bluetooth. Instead it deactivates and
> > activate back a (Linux?) feature called Bluetooth Coexistence.
> >
> > Hardware is complicated...
> >
> > The issue is that WiFi and Bluetooth can use the same radio frequencies
> > (2.4GHz) and probably sometimes even the same antenna.
> >
> > So if Both the WiFi and Bluetooth try to transmit at the same time,
> > they would interfere with each other, and the resulting signal being
> > transmitted would be of very bad quality.
> >
> > So in Linux there is a mechanism to deal with that that is called
> > Bluetooth coexistance. There is more background information on it here:
> > https://wireless.kernel.org/en/users/Documentation/Bluetooth-coexistence
> >
> > As for why it's enabled I've seen this commit inside the same
> > repository (frameworks/opt/net/wifi):
> >> commit 550b2696366dcad08c392c3617a18f70b6e7edf0
> >> Author: Nalla Kartheek <karthe at codeaurora.org>
> >> Date:   Mon Jul 27 12:48:39 2015 +0530
> >>
> >>     Wi-Fi: Set BTCOEXMODE_DISABLED irrespective of BT's connection
> >> state
> >>     BTCOEXMODE_DISABLE has to be triggered during the DHCP phase even
> >>     on an active BT connection to ensure that Wi-Fi is given
> >>     preference over the BT.
> >>     This commit ensures the same
> >>
> >>     Change-Id: I000a79cc3f13c2a91287386558294f120ff54e78
> > However I am not familiar enough with the Linux WiFi stack to have more
> > insights than what the commit says.
> >
> >> This is a workaround because the dongle might actually have
> >> Bluetooth, but I don't know what a proper fix to this would be.
> > Do you have a log of the errors you just mentioned above?
> >
> > I've looked at 5.3, and the ath9k_htc driver has a btcoex_enable option
> > in its module. However I failed to figure out what was the
> > default (in a reasonable time) in the code as it's not set, and
> > module_param_named ends up using some compiler/linker annotations:
> >>     __attribute__ ((unused,__section__
> >> ("__param"),aligned(sizeof(void *)))) \
> >>        = { __param_str_##name, THIS_MODULE, ops,
> >> \ VERIFY_OCTAL_PERMISSIONS(perm), level, flags, { arg } }
> >
> > But if I load the ath9k_htc module on 5.2, the default seem to be 0.
> >
> > So we might also be able to workaround the issue by setting some kernel
> > parameter like ath9k_htc.btcoex_enable=1
> >
> >> Signed-off-by: belginstirbu <belginstirbu at hotmail.com>
> >> ---
> >>  .../com/android/server/wifi/WifiStateMachine.java  | 134
> >> +++++++++++++-------- 1 file changed, 87 insertions(+), 47
> >> deletions(-)
> >>
> >> diff --git
> >> a/service/java/com/android/server/wifi/WifiStateMachine.java
> >> b/service/java/com/android/server/wifi/WifiStateMachine.java index
> >> 38d0ac8..2acda79 100644 ---
> >> a/service/java/com/android/server/wifi/WifiStateMachine.java +++
> >> b/service/java/com/android/server/wifi/WifiStateMachine.java @@
> >> -198,7 +198,8 @@ public class WifiStateMachine extends StateMachine
> >> implements WifiNative.WifiPno private ConnectivityManager mCm;
> >> private DummyWifiLogger mWifiLogger; private WifiApConfigStore
> >> mWifiApConfigStore;
> >> -    private final boolean mP2pSupported;
> >> +    private boolean mP2pSupported;
> >> +    private boolean mDongleConnected;
> >>      private boolean mIbssSupported;
> >>      private final AtomicBoolean mP2pConnected = new
> >> AtomicBoolean(false); private boolean mTemporarilyDisconnectWifi =
> >> false; @@ -1155,6 +1156,8 @@ public class WifiStateMachine extends
> >> StateMachine implements WifiNative.WifiPno mP2pSupported =
> >> mContext.getPackageManager().hasSystemFeature(
> >> PackageManager.FEATURE_WIFI_DIRECT);
> >> +    mDongleConnected = false;
> >> +
> >>          mWifiNative = new WifiNative(mInterfaceName);
> >>          mWifiConfigStore = new WifiConfigStore(context,this,
> >> mWifiNative); mWifiAutoJoinController = new
> >> WifiAutoJoinController(context, this, @@ -5262,8 +5265,8 @@ public
> >> class WifiStateMachine extends StateMachine implements
> >> WifiNative.WifiPno private void
> >> handleSupplicantConnectionLoss(boolean killSupplicant) { /* Socket
> >> connection can be lost when we do a graceful shutdown
> >
> >
> >> -        * or when the driver is hung. Ensure supplicant is stopped
> >> here.
> >> -        */
> >> +     * or when the driver is hung. Ensure supplicant is stopped
> >> here.
> >> +     */
> > The lines look identical but they are not.
> > Previously there was 8 spaces before the '*' which was changed by a Tab
> > and a space. Replacing that with 8 spaces should make that change
> > disappear from the diff.
> >
> >>          if (killSupplicant) {
> >>              mWifiMonitor.killSupplicant(mP2pSupported);
> >>          }
> >> @@ -5274,27 +5277,31 @@ public class WifiStateMachine extends
> >> StateMachine implements WifiNative.WifiPno
> >>      void handlePreDhcpSetup() {
> >>          mDhcpActive = true;
> >> -        // Disable the coexistence mode
> >> -        mWifiNative.setBluetoothCoexistenceMode(
> >> +
> >> +    if(false == mDongleConnected)
> > Using 'if(mDongleConnected == false)' instead should look better as it
> > is closer to English.
> >
> >> +    {
> >> +        // Disable the coexistence mode
> >> +        mWifiNative.setBluetoothCoexistenceMode(
> >>                  mWifiNative.BLUETOOTH_COEXISTENCE_MODE_DISABLED);
> >>
> >> -        // Disable power save and suspend optimizations during DHCP
> >> -        // Note: The order here is important for now. Brcm driver
> >> changes
> >> -        // power settings when we control suspend mode optimizations.
> >> -        // TODO: Remove this comment when the driver is fixed.
> >> -        setSuspendOptimizationsNative(SUSPEND_DUE_TO_DHCP, false);
> >> -        mWifiNative.setPowerSave(false);
> >> +        // Disable power save and suspend optimizations during
> >> DHCP
> >> +        // Note: The order here is important for now. Brcm
> >> driver changes
> >> +        // power settings when we control suspend mode
> >> optimizations.
> >> +        // TODO: Remove this comment when the driver is fixed.
> >> +        setSuspendOptimizationsNative(SUSPEND_DUE_TO_DHCP,
> >> false);
> >> +        mWifiNative.setPowerSave(false);
> >> +    }
> >>
> >> -        // Update link layer stats
> >> -        getWifiLinkLayerStats(false);
> >> +    // Update link layer stats
> >> +    getWifiLinkLayerStats(false);
> > Here the lines also look identical. Replacing the tab that is at the
> > beginning of the line by 8 spaces should remove that from the diff.
> >
> >> -        /* P2p discovery breaks dhcp, shut it down in order to get
> >> through this */
> >> -        Message msg = new Message();
> >> -        msg.what = WifiP2pServiceImpl.BLOCK_DISCOVERY;
> >> -        msg.arg1 = WifiP2pServiceImpl.ENABLED;
> >> -        msg.arg2 = DhcpStateMachine.CMD_PRE_DHCP_ACTION_COMPLETE;
> >> -        msg.obj = mDhcpStateMachine;
> >> -        mWifiP2pChannel.sendMessage(msg);
> >> +    /* P2p discovery breaks dhcp, shut it down in order to get
> >> through this */
> >> +    Message msg = new Message();
> >> +    msg.what = WifiP2pServiceImpl.BLOCK_DISCOVERY;
> >> +    msg.arg1 = WifiP2pServiceImpl.ENABLED;
> >> +    msg.arg2 = DhcpStateMachine.CMD_PRE_DHCP_ACTION_COMPLETE;
> >> +    msg.obj = mDhcpStateMachine;
> >> +    mWifiP2pChannel.sendMessage(msg);
> >>      }
> > Here the lines also look identical. Replacing the tab that is at the
> > beginning of the line by 8 spaces should remove that from the diff.
> >
> >> @@ -5337,15 +5344,18 @@ public class WifiStateMachine extends
> >> StateMachine implements WifiNative.WifiPno }
> >>
> >>      void handlePostDhcpSetup() {
> >> -        /* Restore power save and suspend optimizations */
> >> -        setSuspendOptimizationsNative(SUSPEND_DUE_TO_DHCP, true);
> >> -        mWifiNative.setPowerSave(true);
> >> +    if(false == mDongleConnected)
> > Using 'if(mDongleConnected == false)' instead should look better as it
> > is closer to English.
> >
> >> +    {
> >> +        /* Restore power save and suspend optimizations */
> >> +        setSuspendOptimizationsNative(SUSPEND_DUE_TO_DHCP, true);
> >> +        mWifiNative.setPowerSave(true);
> >>
> >> -
> >> mWifiP2pChannel.sendMessage(WifiP2pServiceImpl.BLOCK_DISCOVERY,
> >> WifiP2pServiceImpl.DISABLED);
> >> +
> >> mWifiP2pChannel.sendMessage(WifiP2pServiceImpl.BLOCK_DISCOVERY,
> >> WifiP2pServiceImpl.DISABLED);
> >> -        // Set the coexistence mode back to its default value
> >> -        mWifiNative.setBluetoothCoexistenceMode(
> >> +        // Set the coexistence mode back to its default value
> >> +        mWifiNative.setBluetoothCoexistenceMode(
> >>                  mWifiNative.BLUETOOTH_COEXISTENCE_MODE_SENSE);
> >> +    }
> >>
> >>          mDhcpActive = false;
> >>      }
> >> @@ -6047,7 +6057,13 @@ public class WifiStateMachine extends
> >> StateMachine implements WifiNative.WifiPno
> >>                      * Avoids issues with drivers that do not handle
> >> interface down
> >>                      * on a running supplicant properly.
> >>                      */
> >> +
> >> +                mDongleConnected = false;
> >> +
> > The like above shows in red in 'git show HEAD' because it has no text
> > but there is invisible spaces and tabs. Removing the invisible spaces
> > and tab fixes that.
> >
> >>                      mWifiMonitor.killSupplicant(mP2pSupported);
> >> +
> > Same here: There are also invisible spaces and tabs to remove.
> >
> >> +                mP2pSupported =
> >> mContext.getPackageManager().hasSystemFeature(
> >> +                    PackageManager.FEATURE_WIFI_DIRECT);
> >>
> >>                      if (mWifiNative.loadDriver()) {
> >>                          try {
> >> @@ -6096,7 +6112,23 @@ public class WifiStateMachine extends
> >> StateMachine implements WifiNative.WifiPno }
> >>                      } else {
> >>                          loge("Failed to load driver");
> > Maybe that could be changed to something like:
> > 'loge("Failed to load native driver");'
> >> -                        setWifiState(WifiManager.WIFI_STATE_FAILED);
> >> +
> >> +                    loge("Trying to load external wifi dongle");
> > And that could be improved with something like 'Now trying to load
> > [...]' or 'Trying to load [...] instead'.
> >
> >> +
> >> +                    mP2pSupported = false;
> >> +
> > There is the same above: invisible spaces and tabs to remove.
> >> +                    mWifiMonitor.killSupplicant(mP2pSupported);
> >> +
> > And again, there is some invisible spaces and tabs to remove.
> >> +                        if
> >> (mWifiNative.startSupplicant(mP2pSupported)) {
> >> +                            setWifiState(WIFI_STATE_ENABLING);
> >> +                            if (DBG) log("Supplicant start
> >> successful");
> >> +                            mWifiMonitor.startMonitoring();
> >> +                        mDongleConnected = true;
> >> +                            transitionTo(mSupplicantStartingState);
> >> +                        } else {
> >> +                            loge("Failed to start supplicant!");
> >> +
> >> setWifiState(WifiManager.WIFI_STATE_FAILED);
> >> +                        }
> >>                      }
> >>                      break;
> >>                  case CMD_START_AP:
> >> @@ -6527,24 +6559,28 @@ public class WifiStateMachine extends
> >> StateMachine implements WifiNative.WifiPno mInDelayedStop = false;
> >>              mDelayedStopCounter++;
> >>              updateBatteryWorkSource(null);
> >> -            /**
> >> -             * Enable bluetooth coexistence scan mode when bluetooth
> >> connection is active.
> >> -             * When this mode is on, some of the low-level scan
> >> parameters used by the
> >> -             * driver are changed to reduce interference with
> >> bluetooth
> >> -             */
> >> -
> >> mWifiNative.setBluetoothCoexistenceScanMode(mBluetoothConnectionActive);
> >> -            /* initialize network state */
> >> -            setNetworkDetailedState(DetailedState.DISCONNECTED);
> >>
> >> -            /* Remove any filtering on Multicast v6 at start */
> >> -            mWifiNative.stopFilteringMulticastV6Packets();
> >> -
> >> -            /* Reset Multicast v4 filtering state */
> >> -            if (mFilteringMulticastV4Packets.get()) {
> >> -                mWifiNative.startFilteringMulticastV4Packets();
> >> -            } else {
> >> -                mWifiNative.stopFilteringMulticastV4Packets();
> >> -            }
> >> +        if(false == mDongleConnected)
> > Using 'if(mDongleConnected == false)' instead should look better as it
> > is closer to English.
> >> +        {
> >> +            /**
> >> +             * Enable bluetooth coexistence scan mode when
> >> bluetooth connection is active.
> >> +             * When this mode is on, some of the low-level scan
> >> parameters used by the
> >> +             * driver are changed to reduce interference with
> >> bluetooth
> >> +             */
> >> +
> >> mWifiNative.setBluetoothCoexistenceScanMode(mBluetoothConnectionActive);
> >> +            /* initialize network state */
> >> +            setNetworkDetailedState(DetailedState.DISCONNECTED);
> >> +
> >> +            /* Remove any filtering on Multicast v6 at start */
> >> +            mWifiNative.stopFilteringMulticastV6Packets();
> >> +
> >> +            /* Reset Multicast v4 filtering state */
> >> +            if (mFilteringMulticastV4Packets.get()) {
> >> +                mWifiNative.startFilteringMulticastV4Packets();
> >> +            } else {
> >> +                mWifiNative.stopFilteringMulticastV4Packets();
> >> +            }
> >> +        }
> >>
> >>              mDhcpActive = false;
> >>
> >> @@ -6647,9 +6683,13 @@ public class WifiStateMachine extends
> >> StateMachine implements WifiNative.WifiPno }
> >>                      break;
> >>                  case CMD_BLUETOOTH_ADAPTER_STATE_CHANGE:
> >> -                    mBluetoothConnectionActive = (message.arg1 !=
> >> -                            BluetoothAdapter.STATE_DISCONNECTED);
> >> -
> >> mWifiNative.setBluetoothCoexistenceScanMode(mBluetoothConnectionActive);
> >> +                if(false == mDongleConnected)
> > Using 'if(mDongleConnected == false)' instead should look better as it
> > is closer to English.
> >> +                {
> >> +                    mBluetoothConnectionActive = (message.arg1 !=
> >> +
> >> BluetoothAdapter.STATE_DISCONNECTED);
> >> +
> >> mWifiNative.setBluetoothCoexistenceScanMode(mBluetoothConnectionActive);
> >> +                }
> >> +
> > The like above shows in red in 'git show HEAD' because it has no text
> > but there is invisible spaces and tabs. Removing the invisible spaces
> > and tab fixes that.
> >
> > Thanks a lot for the patch.
> >
> > I'm looking forward for a second version with the comments above being
> > addressed.
> >
> > Denis.
> >
> >
> > _______________________________________________
> > Replicant mailing list
> > Replicant at osuosl.org
> > https://lists.osuosl.org/mailman/listinfo/replicant
> >
>
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> Replicant mailing list
> Replicant at osuosl.org
> https://lists.osuosl.org/mailman/listinfo/replicant
>
>
> ------------------------------
>
> End of Replicant Digest, Vol 324, Issue 2
> *****************************************
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osuosl.org/pipermail/replicant/attachments/20191010/64e43157/attachment-0001.html>


More information about the Replicant mailing list