From: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
To: Dan Williams <dcbw@redhat.com>
Cc: netdev@vger.kernel.org, davem@davemloft.net,
fengguang.wu@intel.com, jiri@resnulli.us,
stephen@networkplumber.org, David.Laight@aculab.com,
marcel@holtmann.org
Subject: Re: [PATCH net-next 3/3 v5] drivers: net: ethernet: qualcomm: rmnet: Initial implementation
Date: Thu, 17 Aug 2017 00:38:31 -0600 [thread overview]
Message-ID: <0bcdb3670a82c3b73567cd3d5e70340b@codeaurora.org> (raw)
In-Reply-To: <1502939764.30484.7.camel@redhat.com>
> I'm probably forgetting a bit of the original context. Say you have
> one of these "network devices in IP mode". What happens with the
> device *before* you attach an rmnet child? Can it pass traffic before
> that point at all, or does the modem expect MAP already?
Hi Dan
All traffic needs to be in MAP format only.
>> + dev_hold(real_dev);
>
> I could be entirely wrong, but isn't this mostly handled for you if you
> use netdev_upper_dev_link() like ipvlan and macvlan do? That looks
> like it provides a couple things: (a) handles the dev_hold() for you
> and (b) provides mechanisms to get the upper device if you need it.
> I'm not actually familiar with the "adjacent device" functionality, but
> it looked similar in purpose.
Does this API modify the data path as well or is it only for
establishing
a hierarchy between nodes (which I assume should help for easier
cleanup).
Currently, I register with the real_dev and use the rx_handler to
intercept
the incoming MAP packets. If netdev_upper_dev_link only modifies the
device
refcounting, I should be able to easily modify to use it.
>
>> + return 0;
>> +}
>> +
>> +static int __rmnet_set_endpoint_config(struct net_device *dev, int
>> config_id,
>> + struct rmnet_endpoint *ep)
>> +{
>> + struct rmnet_endpoint *dev_ep;
>> +
>> + ASSERT_RTNL();
>> +
>> + dev_ep = rmnet_get_endpoint(dev, config_id);
>> +
>> + if (!dev_ep || dev_ep->refcount)
>> + return -EINVAL;
>> +
>> + memcpy(dev_ep, ep, sizeof(struct rmnet_endpoint));
>> + if (config_id == RMNET_LOCAL_LOGICAL_ENDPOINT)
>> + dev_ep->mux_id = 0;
>> + else
>> + dev_ep->mux_id = config_id;
>
> So... if config_id is LOGICAL_ENDPOINT (-1) this sets mux_id to 0.
>
> But if config_id is 0, it *also* sets mux_id to 0?
>
> Can you clarify what mux_id = 0 actually means here? Can you also talk
> a bit about the difference between local_ep and muxed_ep?
>
mux_id 0 is for the pass through mode (for the testing scenario).
The MAP packets arriving maybe shipped as is to a different net device
(say one exposed by USB).
While transmitting packets from rmnet dev to real_dev, the local_ep
has the information about the rmnet dev. Based on that, the MAP
header is stamped and packet is transmitted.
muxed_ep is for receiving the packets where the MAP header is
stripped off and the packets is passed to the appropriate rmnet dev.
>> + case NETDEV_UNREGISTER_FINAL:
> I don't see anywhere that RMNET_INGRESS_FIX_ETHERNET can get set?
> Also, can't that be autodetected?
>
>
> Just use ETH_HLEN instead of RMNET_ETHERNET_HEADER_LENGTH.
>
> But really, I can't see where FIX_ETHERNET ever gets set. And as
> above, can't this be automatically detected? Can you describe what the
> issue is here in more detail?
>
> I know for qmi_wwan.c we had to fix up a number of firmware bugs, but
> all that is done automatically.
>
The ethernet mode was earlier for some experimental configurations.
>> + int egress_format = RMNET_EGRESS_FORMAT_MUXING |
>> + RMNET_EGRESS_FORMAT_MAP;
>> + struct net_device *real_dev;
>> + int mode = RMNET_EPMODE_VND;
>> + u16 mux_id;
>> +
>> + real_dev = __dev_get_by_index(src_net,
>> nla_get_u32(tb[IFLA_LINK]));
>> + if (!real_dev || !dev)
>> + return -ENODEV;
>> +
>> + if (!data[IFLA_VLAN_ID])
>
> Also, I wasn't thinking to actually *use* IFLA_VLAN_ID, but I'll let
> others weigh in. It does fit in this case, I think, but maybe creating
> an RMNET-specific attribute would be better?
>
I have implemented a single message for setting up the device based on
mux
in this patchset so this suffices for me :) . Stephen had suggested to
reuse
existing structs as much as possible.
>> +struct rmnet_map_control_command {
>> + u8 command_name;
>> + u8 cmd_type:2;
>> + u8 reserved:6;
>> + u16 reserved2;
>> + u32 transaction_id;
>> + union {
>> + u8 data[65528];
>
> Um.... that seems really, really odd. Typically this would go below
> the flow_control struct, and actually be:
>
> u8 data[0];
>
> To indicate that the struct member should exist and that you can use
> it, but that it has no specific size (since the size will be determined
> by the skb size or by a protocol field instead).
>
> Thats all for now...
>
> Dan
>
I will change this to u8 data[0];
next prev parent reply other threads:[~2017-08-17 6:38 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-17 0:55 [PATCH net-next 0/3 v5] Add support for rmnet driver Subash Abhinov Kasiviswanathan
2017-08-17 0:55 ` [PATCH net-next 1/3 v5] net: ether: Add support for multiplexing and aggregation type Subash Abhinov Kasiviswanathan
2017-08-17 0:55 ` [PATCH net-next 2/3 v5] net: arp: Add support for raw IP device Subash Abhinov Kasiviswanathan
2017-08-17 0:55 ` [PATCH net-next 3/3 v5] drivers: net: ethernet: qualcomm: rmnet: Initial implementation Subash Abhinov Kasiviswanathan
2017-08-17 3:16 ` Dan Williams
2017-08-17 6:38 ` Subash Abhinov Kasiviswanathan [this message]
2017-08-19 12:56 ` kbuild test robot
2017-08-22 4:08 ` Stephen Hemminger
2017-08-22 5:34 ` Subash Abhinov Kasiviswanathan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0bcdb3670a82c3b73567cd3d5e70340b@codeaurora.org \
--to=subashab@codeaurora.org \
--cc=David.Laight@aculab.com \
--cc=davem@davemloft.net \
--cc=dcbw@redhat.com \
--cc=fengguang.wu@intel.com \
--cc=jiri@resnulli.us \
--cc=marcel@holtmann.org \
--cc=netdev@vger.kernel.org \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.