Closed Bug 904514 Opened 6 years ago Closed 2 years ago

[meta] NetworkManager enhancement

Categories

(Firefox OS Graveyard :: RIL, defect)

ARM
Gonk (Firefox OS)
defect
Not set

Tracking

(tracking-b2g:backlog)

RESOLVED WONTFIX
tracking-b2g backlog

People

(Reporter: edgar, Unassigned)

References

Details

(Whiteboard: [grooming])

Attachments

(2 files)

Recently we had a discussion about the NetworkManager enhancement, file this bug as a meta bug to track status. Thanks

Please see below link for more detailed information.
* dev-b2g discussion: https://groups.google.com/d/msg/mozilla.dev.b2g/MVwLCASwFF8/X3hhGycCobcJ
* slides: http://people.mozilla.com/~echen/slides/NetworkManager_20130806/
Depends on: 904542
Depends on: 908135
Depends on: 911713
Depends on: 925676
Depends on: 905568
Blocks: 922584
Depends on: 939046
No longer depends on: 904542
No longer depends on: 911713
Component: General → RIL
Put this bug into backlog.
blocking-b2g: --- → backlog
Depends on: 939026
Depends on: 1054148
Depends on: 1109479
Depends on: 973543
Depends on: 1114901
Depends on: 1118675
Please see Edgar’s original proposal for backgroud and details. Thank you, Edgar!
http://edgarchen.github.io/HTML_slides/NetworkManager_20140909/ 

In the slides above, we were to add some new APIs to nsIRadioInterface. However, after IPDL refactoringring and after moving sms out of RadioInterfaceLayer (v2.2),    nsIRadioInterfaceLayer and nsIRadioInterface become more mozilla internal usage. Thus, we do not want to add something back to nsIRadioInterface. 

We would instead create another specific interface for setupDataConnection(), deactitivateDataConnection, and  getDataConnectionList(). This attachment is to show the difference, while the main concept is totally the same as |NetworkManager_20140909|.
Hi Anshul,
We'd like to make some progress on this topic in the first quarter. attachment 8552856 [details] displays the new architecture and introduces a proposal to CAF (page 9). Is it possible that your team could take a look and provide feedback by the end of this month? Do appreciate your help :)
Flags: needinfo?(anshulj)
Duplicate of this bug: 965620
Depends on: 1126222
Flags: needinfo?(anshulj) → needinfo?(pgravel)
feedback provided through sync-up meeting.
Flags: needinfo?(pgravel)
Whiteboard: [grooming]
(In reply to pgravel from comment #5)
> feedback provided through sync-up meeting.

Hi Phil,

Sorry in advance if I mix something up, but I couldn't remember that we talked about the feedback in the sync-up meeting last week. :( Would you minding commenting again directly on bugzilla? Thank you.
Flags: needinfo?(pgravel)
Phil's analysis below:

- Who is responsible for managing reconnecting after network failure / data call drop?
- Who is responsible for managing retries of failed connection attempts?
- Network manager will need to manage the IMS data call the same was as the default data call.
- DSDS. Switching data calls between subscriptions is not trivial, and involves many special cases (i.e. MMS on sub 1 while data is active on sub 2). How will the RIL layer be notified that subscriptions need to be changed? 
- Will the NetworkManager/NetworkInterface layer be flexible enough for us to add additional NetworkInterface(s) for any special data call types?
- How are the nsIDataConnectionHandler “registered” with the NetworkInterface? In other words, how does the NetworkInterface actually know which nsIDataConnectionHandler object to use? (especially in the DSDS case).
Flags: needinfo?(pgravel)
(In reply to Anshul from comment #7)

Hi Phil, Anshul,

Attached is a class diagram of our plan. These modules are now in RadioInterfaceLayer.js, but will be moved to a separate module (see Bug 1114901), so that you can reuse them directly.

As you can see in the diagram, there is only one |gDataConnectionManager| that handles cross-sim/subscription requests. |gDataConnectionManager| manages a number of |DataConnectionHandler|s (one per sim/subscription). And each |DataConnectioHandler| manages different types of |RILNetworkInterface|s (e.g. default, mms, supl, etc.). |DataCall| represents an actual data connection and can be shared among |RILNetworkInterface|s.

We are going to add a new |nsIDataConnectionHandler| (name subject to change), which is the interface to send commands to the underlying RIL, so all you need to implement is this interface.

> Phil's analysis below:
> 
> - Who is responsible for managing reconnecting after network failure / data
> call drop?

Currently, |DataCall| itself handles the network failure / data call drop when it receives data call state changes.

> - Who is responsible for managing retries of failed connection attempts?

Same as above.

> - Network manager will need to manage the IMS data call the same was as the
> default data call.

Currently, IMS data call is treated as a secondary data call, that means there is no default route for this data type. We are not very sure how IMS data call should work, but we'd be happy to modify/implement it if we have more information about it.

> - DSDS. Switching data calls between subscriptions is not trivial, and
> involves many special cases (i.e. MMS on sub 1 while data is active on sub
> 2). How will the RIL layer be notified that subscriptions need to be
> changed? 

|gDataConnectionManager| handles the switch of subscriptions. In this case, we need to add one more function: |setDataRegistration(attach)| to |nsIDataConnectionHandler|, so |gDataConnectionManager| will set the unsubscription of one |nsIDataConnectionHandler| and the subscription of the other |nsIDataConnectionHandler|.
Gaia is in control of triggering the subscription switch command per user request.

> - Will the NetworkManager/NetworkInterface layer be flexible enough for us
> to add additional NetworkInterface(s) for any special data call types?

We think so. You just need to register the NetworkInterface to NetworkManager.
Other minor changes is to add the constant type in |nsINetworkManager.idl| and you might need to include the NetworkInterface type in function |isNetworkTypeSecondaryMobile()| in NetworkManager.js

> - How are the nsIDataConnectionHandler “registered” with the
> NetworkInterface? In other words, how does the NetworkInterface actually
> know which nsIDataConnectionHandler object to use? (especially in the DSDS
> case).

|nsIDataConnectionHandler| works just like the current |nsIRadioInterface|. So, each |RILNetworkInterface| can use its serviceId to get the corresponding |nsIDataConnectionHandler| instance. Please note that there will be one |nsIDataConnectionHandler| instance per sim/subscription.

---

Hope this answers your questions and please let us know if you have any other concerns.

Hsinyi, Edgar, please feel free to correct me or add any other comments. Thanks!
blocking-b2g: backlog → ---
Depends on: 1143984
Hi Phil,
Does comment 8 resolve your concerns?
Flags: needinfo?(pgravel)
Yes, thank you.
Flags: needinfo?(pgravel)
Depends on: 1152472
No longer depends on: 1152472
Depends on: 1130962
Firefox OS is not being worked on
Status: NEW → RESOLVED
Closed: 2 years ago
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.