* [RFC PATCH net-next v3 3/4] rocker: Handle IFF_PROTODOWN by doing a PHYS-DOWN on the switch port.
@ 2015-04-27 17:38 anuradhak
2015-04-28 5:51 ` Scott Feldman
0 siblings, 1 reply; 7+ messages in thread
From: anuradhak @ 2015-04-27 17:38 UTC (permalink / raw)
To: davem, sfeldma; +Cc: netdev, roopa, gospo, wkok, anuradhak
From: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
IFF_PROTODOWN can be set by user space applications like MLAG on detecting
errors on a switch port. This patch provides sample switch driver changes
for handling IFF_PROTODOWN. Rocker PHYS disables the port in response to
protodown.
Note: I understand Scott has some rocker changes on hold. I will re-spin
this patch once his changes are in.
Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
Signed-off-by: Andy Gospodarek <gospo@cumulusnetworks.com>
Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: Wilson Kok <wkok@cumulusnetworks.com>
---
drivers/net/ethernet/rocker/rocker.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
index a87b177..e3084e3 100644
--- a/drivers/net/ethernet/rocker/rocker.c
+++ b/drivers/net/ethernet/rocker/rocker.c
@@ -3838,7 +3838,8 @@ static int rocker_port_open(struct net_device *dev)
napi_enable(&rocker_port->napi_tx);
napi_enable(&rocker_port->napi_rx);
- rocker_port_set_enable(rocker_port, true);
+ if (!(dev->flags & IFF_PROTO_DOWN))
+ rocker_port_set_enable(rocker_port, true);
netif_start_queue(dev);
return 0;
@@ -4238,6 +4239,18 @@ static int rocker_port_swdev_port_stp_update(struct net_device *dev, u8 state)
return rocker_port_stp_update(rocker_port, state);
}
+static int rocker_port_swdev_port_phy_state_set(struct net_device *dev,
+ bool enable)
+{
+ struct rocker_port *rocker_port = netdev_priv(dev);
+
+ if (enable && (dev->flags & IFF_UP) && !(dev->flags & IFF_PROTO_DOWN))
+ rocker_port_set_enable(rocker_port, true);
+ else
+ rocker_port_set_enable(rocker_port, false);
+ return 0;
+}
+
static int rocker_port_swdev_fib_ipv4_add(struct net_device *dev,
__be32 dst, int dst_len,
struct fib_info *fi,
@@ -4268,6 +4281,7 @@ static const struct swdev_ops rocker_port_swdev_ops = {
.swdev_port_stp_update = rocker_port_swdev_port_stp_update,
.swdev_fib_ipv4_add = rocker_port_swdev_fib_ipv4_add,
.swdev_fib_ipv4_del = rocker_port_swdev_fib_ipv4_del,
+ .swdev_port_phy_state_set = rocker_port_swdev_port_phy_state_set,
};
/********************
--
1.7.10.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [RFC PATCH net-next v3 3/4] rocker: Handle IFF_PROTODOWN by doing a PHYS-DOWN on the switch port.
2015-04-27 17:38 [RFC PATCH net-next v3 3/4] rocker: Handle IFF_PROTODOWN by doing a PHYS-DOWN on the switch port anuradhak
@ 2015-04-28 5:51 ` Scott Feldman
2015-04-28 15:49 ` Anuradha Karuppiah
0 siblings, 1 reply; 7+ messages in thread
From: Scott Feldman @ 2015-04-28 5:51 UTC (permalink / raw)
To: anuradhak
Cc: David S. Miller, Netdev, Roopa Prabhu, Andy Gospodarek, Wilson Kok
On Mon, Apr 27, 2015 at 10:38 AM, <anuradhak@cumulusnetworks.com> wrote:
> From: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>
> IFF_PROTODOWN can be set by user space applications like MLAG on detecting
> errors on a switch port. This patch provides sample switch driver changes
> for handling IFF_PROTODOWN. Rocker PHYS disables the port in response to
> protodown.
>
> Note: I understand Scott has some rocker changes on hold. I will re-spin
> this patch once his changes are in.
>
> Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
> Signed-off-by: Andy Gospodarek <gospo@cumulusnetworks.com>
> Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
> Signed-off-by: Wilson Kok <wkok@cumulusnetworks.com>
> ---
> drivers/net/ethernet/rocker/rocker.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
> index a87b177..e3084e3 100644
> --- a/drivers/net/ethernet/rocker/rocker.c
> +++ b/drivers/net/ethernet/rocker/rocker.c
> @@ -3838,7 +3838,8 @@ static int rocker_port_open(struct net_device *dev)
>
> napi_enable(&rocker_port->napi_tx);
> napi_enable(&rocker_port->napi_rx);
> - rocker_port_set_enable(rocker_port, true);
> + if (!(dev->flags & IFF_PROTO_DOWN))
> + rocker_port_set_enable(rocker_port, true);
> netif_start_queue(dev);
> return 0;
>
> @@ -4238,6 +4239,18 @@ static int rocker_port_swdev_port_stp_update(struct net_device *dev, u8 state)
> return rocker_port_stp_update(rocker_port, state);
> }
>
> +static int rocker_port_swdev_port_phy_state_set(struct net_device *dev,
> + bool enable)
> +{
> + struct rocker_port *rocker_port = netdev_priv(dev);
> +
> + if (enable && (dev->flags & IFF_UP) && !(dev->flags & IFF_PROTO_DOWN))
> + rocker_port_set_enable(rocker_port, true);
> + else
> + rocker_port_set_enable(rocker_port, false);
This isn't working like your expecting. PHY link is still up on the
rocker port, so the other end of the wire still sees link UP even when
IFF_PROTO_DOWN is set locally.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC PATCH net-next v3 3/4] rocker: Handle IFF_PROTODOWN by doing a PHYS-DOWN on the switch port.
2015-04-28 5:51 ` Scott Feldman
@ 2015-04-28 15:49 ` Anuradha Karuppiah
2015-04-28 19:48 ` Scott Feldman
0 siblings, 1 reply; 7+ messages in thread
From: Anuradha Karuppiah @ 2015-04-28 15:49 UTC (permalink / raw)
To: Scott Feldman
Cc: David S. Miller, Netdev, Roopa Prabhu, Andy Gospodarek, Wilson Kok
On Mon, Apr 27, 2015 at 10:51 PM, Scott Feldman <sfeldma@gmail.com> wrote:
> On Mon, Apr 27, 2015 at 10:38 AM, <anuradhak@cumulusnetworks.com> wrote:
>> From: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>>
>> IFF_PROTODOWN can be set by user space applications like MLAG on detecting
>> errors on a switch port. This patch provides sample switch driver changes
>> for handling IFF_PROTODOWN. Rocker PHYS disables the port in response to
>> protodown.
>>
>> Note: I understand Scott has some rocker changes on hold. I will re-spin
>> this patch once his changes are in.
>>
>> Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>> Signed-off-by: Andy Gospodarek <gospo@cumulusnetworks.com>
>> Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
>> Signed-off-by: Wilson Kok <wkok@cumulusnetworks.com>
>> ---
>> drivers/net/ethernet/rocker/rocker.c | 16 +++++++++++++++-
>> 1 file changed, 15 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
>> index a87b177..e3084e3 100644
>> --- a/drivers/net/ethernet/rocker/rocker.c
>> +++ b/drivers/net/ethernet/rocker/rocker.c
>> @@ -3838,7 +3838,8 @@ static int rocker_port_open(struct net_device *dev)
>>
>> napi_enable(&rocker_port->napi_tx);
>> napi_enable(&rocker_port->napi_rx);
>> - rocker_port_set_enable(rocker_port, true);
>> + if (!(dev->flags & IFF_PROTO_DOWN))
>> + rocker_port_set_enable(rocker_port, true);
>> netif_start_queue(dev);
>> return 0;
>>
>> @@ -4238,6 +4239,18 @@ static int rocker_port_swdev_port_stp_update(struct net_device *dev, u8 state)
>> return rocker_port_stp_update(rocker_port, state);
>> }
>>
>> +static int rocker_port_swdev_port_phy_state_set(struct net_device *dev,
>> + bool enable)
>> +{
>> + struct rocker_port *rocker_port = netdev_priv(dev);
>> +
>> + if (enable && (dev->flags & IFF_UP) && !(dev->flags & IFF_PROTO_DOWN))
>> + rocker_port_set_enable(rocker_port, true);
>> + else
>> + rocker_port_set_enable(rocker_port, false);
>
> This isn't working like your expecting. PHY link is still up on the
> rocker port, so the other end of the wire still sees link UP even when
> IFF_PROTO_DOWN is set locally.
I wanted to check with you first on the rocker handling; that is the main
reason for posting this an RFC (thanks for the review).
I used rocker_port_set_enable/PORT_PHYS_ENABLE for setting the phy state
because I assumed that in the case of an offloaded switch driver it would be
the equivalent of doing "sdk port N en=1|0". Is that not the case? If not,
could you please point me in the right direction?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC PATCH net-next v3 3/4] rocker: Handle IFF_PROTODOWN by doing a PHYS-DOWN on the switch port.
2015-04-28 15:49 ` Anuradha Karuppiah
@ 2015-04-28 19:48 ` Scott Feldman
2015-04-28 20:35 ` Anuradha Karuppiah
0 siblings, 1 reply; 7+ messages in thread
From: Scott Feldman @ 2015-04-28 19:48 UTC (permalink / raw)
To: Anuradha Karuppiah
Cc: David S. Miller, Netdev, Roopa Prabhu, Andy Gospodarek, Wilson Kok
On Tue, Apr 28, 2015 at 8:49 AM, Anuradha Karuppiah
<anuradhak@cumulusnetworks.com> wrote:
> On Mon, Apr 27, 2015 at 10:51 PM, Scott Feldman <sfeldma@gmail.com> wrote:
>> On Mon, Apr 27, 2015 at 10:38 AM, <anuradhak@cumulusnetworks.com> wrote:
>>> From: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>>>
>>> IFF_PROTODOWN can be set by user space applications like MLAG on detecting
>>> errors on a switch port. This patch provides sample switch driver changes
>>> for handling IFF_PROTODOWN. Rocker PHYS disables the port in response to
>>> protodown.
>>>
>>> Note: I understand Scott has some rocker changes on hold. I will re-spin
>>> this patch once his changes are in.
>>>
>>> Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>>> Signed-off-by: Andy Gospodarek <gospo@cumulusnetworks.com>
>>> Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
>>> Signed-off-by: Wilson Kok <wkok@cumulusnetworks.com>
>>> ---
>>> drivers/net/ethernet/rocker/rocker.c | 16 +++++++++++++++-
>>> 1 file changed, 15 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
>>> index a87b177..e3084e3 100644
>>> --- a/drivers/net/ethernet/rocker/rocker.c
>>> +++ b/drivers/net/ethernet/rocker/rocker.c
>>> @@ -3838,7 +3838,8 @@ static int rocker_port_open(struct net_device *dev)
>>>
>>> napi_enable(&rocker_port->napi_tx);
>>> napi_enable(&rocker_port->napi_rx);
>>> - rocker_port_set_enable(rocker_port, true);
>>> + if (!(dev->flags & IFF_PROTO_DOWN))
>>> + rocker_port_set_enable(rocker_port, true);
>>> netif_start_queue(dev);
>>> return 0;
>>>
>>> @@ -4238,6 +4239,18 @@ static int rocker_port_swdev_port_stp_update(struct net_device *dev, u8 state)
>>> return rocker_port_stp_update(rocker_port, state);
>>> }
>>>
>>> +static int rocker_port_swdev_port_phy_state_set(struct net_device *dev,
>>> + bool enable)
>>> +{
>>> + struct rocker_port *rocker_port = netdev_priv(dev);
>>> +
>>> + if (enable && (dev->flags & IFF_UP) && !(dev->flags & IFF_PROTO_DOWN))
>>> + rocker_port_set_enable(rocker_port, true);
>>> + else
>>> + rocker_port_set_enable(rocker_port, false);
>>
>> This isn't working like your expecting. PHY link is still up on the
>> rocker port, so the other end of the wire still sees link UP even when
>> IFF_PROTO_DOWN is set locally.
>
> I wanted to check with you first on the rocker handling; that is the main
> reason for posting this an RFC (thanks for the review).
>
> I used rocker_port_set_enable/PORT_PHYS_ENABLE for setting the phy state
> because I assumed that in the case of an offloaded switch driver it would be
> the equivalent of doing "sdk port N en=1|0". Is that not the case? If not,
> could you please point me in the right direction?
To put PHY link down, on PORT_PHYS_ENABLE true, rocker device (qemu)
would need to down the link state for the port so other end of wire
sees link down. I think I remember looking into that but didn't
implement it. In qemu monitor, you can manually set the link up/down
(set_link <dev> [on|off]). We'd need to call the same from within the
rocker device.
So if we want to be able to test this with rocker, we'll need a device
and driver change.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC PATCH net-next v3 3/4] rocker: Handle IFF_PROTODOWN by doing a PHYS-DOWN on the switch port.
2015-04-28 19:48 ` Scott Feldman
@ 2015-04-28 20:35 ` Anuradha Karuppiah
2015-04-29 5:51 ` Scott Feldman
0 siblings, 1 reply; 7+ messages in thread
From: Anuradha Karuppiah @ 2015-04-28 20:35 UTC (permalink / raw)
To: Scott Feldman
Cc: David S. Miller, Netdev, Roopa Prabhu, Andy Gospodarek, Wilson Kok
On Tue, Apr 28, 2015 at 12:48 PM, Scott Feldman <sfeldma@gmail.com> wrote:
> On Tue, Apr 28, 2015 at 8:49 AM, Anuradha Karuppiah
> <anuradhak@cumulusnetworks.com> wrote:
>> On Mon, Apr 27, 2015 at 10:51 PM, Scott Feldman <sfeldma@gmail.com> wrote:
>>> On Mon, Apr 27, 2015 at 10:38 AM, <anuradhak@cumulusnetworks.com> wrote:
>>>> From: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>>>>
>>>> IFF_PROTODOWN can be set by user space applications like MLAG on detecting
>>>> errors on a switch port. This patch provides sample switch driver changes
>>>> for handling IFF_PROTODOWN. Rocker PHYS disables the port in response to
>>>> protodown.
>>>>
>>>> Note: I understand Scott has some rocker changes on hold. I will re-spin
>>>> this patch once his changes are in.
>>>>
>>>> Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>>>> Signed-off-by: Andy Gospodarek <gospo@cumulusnetworks.com>
>>>> Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
>>>> Signed-off-by: Wilson Kok <wkok@cumulusnetworks.com>
>>>> ---
>>>> drivers/net/ethernet/rocker/rocker.c | 16 +++++++++++++++-
>>>> 1 file changed, 15 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
>>>> index a87b177..e3084e3 100644
>>>> --- a/drivers/net/ethernet/rocker/rocker.c
>>>> +++ b/drivers/net/ethernet/rocker/rocker.c
>>>> @@ -3838,7 +3838,8 @@ static int rocker_port_open(struct net_device *dev)
>>>>
>>>> napi_enable(&rocker_port->napi_tx);
>>>> napi_enable(&rocker_port->napi_rx);
>>>> - rocker_port_set_enable(rocker_port, true);
>>>> + if (!(dev->flags & IFF_PROTO_DOWN))
>>>> + rocker_port_set_enable(rocker_port, true);
>>>> netif_start_queue(dev);
>>>> return 0;
>>>>
>>>> @@ -4238,6 +4239,18 @@ static int rocker_port_swdev_port_stp_update(struct net_device *dev, u8 state)
>>>> return rocker_port_stp_update(rocker_port, state);
>>>> }
>>>>
>>>> +static int rocker_port_swdev_port_phy_state_set(struct net_device *dev,
>>>> + bool enable)
>>>> +{
>>>> + struct rocker_port *rocker_port = netdev_priv(dev);
>>>> +
>>>> + if (enable && (dev->flags & IFF_UP) && !(dev->flags & IFF_PROTO_DOWN))
>>>> + rocker_port_set_enable(rocker_port, true);
>>>> + else
>>>> + rocker_port_set_enable(rocker_port, false);
>>>
>>> This isn't working like your expecting. PHY link is still up on the
>>> rocker port, so the other end of the wire still sees link UP even when
>>> IFF_PROTO_DOWN is set locally.
>>
>> I wanted to check with you first on the rocker handling; that is the main
>> reason for posting this an RFC (thanks for the review).
>>
>> I used rocker_port_set_enable/PORT_PHYS_ENABLE for setting the phy state
>> because I assumed that in the case of an offloaded switch driver it would be
>> the equivalent of doing "sdk port N en=1|0". Is that not the case? If not,
>> could you please point me in the right direction?
>
> To put PHY link down, on PORT_PHYS_ENABLE true, rocker device (qemu)
> would need to down the link state for the port so other end of wire
> sees link down. I think I remember looking into that but didn't
> implement it. In qemu monitor, you can manually set the link up/down
> (set_link <dev> [on|off]). We'd need to call the same from within the
> rocker device.
>
> So if we want to be able to test this with rocker, we'll need a device
> and driver change.
Thanks for the details, Scott. We will looking into implementing the necessary
changes to get it working with rocker.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC PATCH net-next v3 3/4] rocker: Handle IFF_PROTODOWN by doing a PHYS-DOWN on the switch port.
2015-04-28 20:35 ` Anuradha Karuppiah
@ 2015-04-29 5:51 ` Scott Feldman
2015-04-29 22:11 ` Anuradha Karuppiah
0 siblings, 1 reply; 7+ messages in thread
From: Scott Feldman @ 2015-04-29 5:51 UTC (permalink / raw)
To: Anuradha Karuppiah
Cc: David S. Miller, Netdev, Roopa Prabhu, Andy Gospodarek, Wilson Kok
On Tue, Apr 28, 2015 at 1:35 PM, Anuradha Karuppiah
<anuradhak@cumulusnetworks.com> wrote:
> On Tue, Apr 28, 2015 at 12:48 PM, Scott Feldman <sfeldma@gmail.com> wrote:
>> On Tue, Apr 28, 2015 at 8:49 AM, Anuradha Karuppiah
>> <anuradhak@cumulusnetworks.com> wrote:
>>> On Mon, Apr 27, 2015 at 10:51 PM, Scott Feldman <sfeldma@gmail.com> wrote:
>>>> On Mon, Apr 27, 2015 at 10:38 AM, <anuradhak@cumulusnetworks.com> wrote:
>>>>> From: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>>>>>
>>>>> IFF_PROTODOWN can be set by user space applications like MLAG on detecting
>>>>> errors on a switch port. This patch provides sample switch driver changes
>>>>> for handling IFF_PROTODOWN. Rocker PHYS disables the port in response to
>>>>> protodown.
>>>>>
>>>>> Note: I understand Scott has some rocker changes on hold. I will re-spin
>>>>> this patch once his changes are in.
>>>>>
>>>>> Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>>>>> Signed-off-by: Andy Gospodarek <gospo@cumulusnetworks.com>
>>>>> Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
>>>>> Signed-off-by: Wilson Kok <wkok@cumulusnetworks.com>
>>>>> ---
>>>>> drivers/net/ethernet/rocker/rocker.c | 16 +++++++++++++++-
>>>>> 1 file changed, 15 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
>>>>> index a87b177..e3084e3 100644
>>>>> --- a/drivers/net/ethernet/rocker/rocker.c
>>>>> +++ b/drivers/net/ethernet/rocker/rocker.c
>>>>> @@ -3838,7 +3838,8 @@ static int rocker_port_open(struct net_device *dev)
>>>>>
>>>>> napi_enable(&rocker_port->napi_tx);
>>>>> napi_enable(&rocker_port->napi_rx);
>>>>> - rocker_port_set_enable(rocker_port, true);
>>>>> + if (!(dev->flags & IFF_PROTO_DOWN))
>>>>> + rocker_port_set_enable(rocker_port, true);
>>>>> netif_start_queue(dev);
>>>>> return 0;
>>>>>
>>>>> @@ -4238,6 +4239,18 @@ static int rocker_port_swdev_port_stp_update(struct net_device *dev, u8 state)
>>>>> return rocker_port_stp_update(rocker_port, state);
>>>>> }
>>>>>
>>>>> +static int rocker_port_swdev_port_phy_state_set(struct net_device *dev,
>>>>> + bool enable)
>>>>> +{
>>>>> + struct rocker_port *rocker_port = netdev_priv(dev);
>>>>> +
>>>>> + if (enable && (dev->flags & IFF_UP) && !(dev->flags & IFF_PROTO_DOWN))
>>>>> + rocker_port_set_enable(rocker_port, true);
>>>>> + else
>>>>> + rocker_port_set_enable(rocker_port, false);
>>>>
>>>> This isn't working like your expecting. PHY link is still up on the
>>>> rocker port, so the other end of the wire still sees link UP even when
>>>> IFF_PROTO_DOWN is set locally.
>>>
>>> I wanted to check with you first on the rocker handling; that is the main
>>> reason for posting this an RFC (thanks for the review).
>>>
>>> I used rocker_port_set_enable/PORT_PHYS_ENABLE for setting the phy state
>>> because I assumed that in the case of an offloaded switch driver it would be
>>> the equivalent of doing "sdk port N en=1|0". Is that not the case? If not,
>>> could you please point me in the right direction?
>>
>> To put PHY link down, on PORT_PHYS_ENABLE true, rocker device (qemu)
>> would need to down the link state for the port so other end of wire
>> sees link down. I think I remember looking into that but didn't
>> implement it. In qemu monitor, you can manually set the link up/down
>> (set_link <dev> [on|off]). We'd need to call the same from within the
>> rocker device.
>>
>> So if we want to be able to test this with rocker, we'll need a device
>> and driver change.
>
> Thanks for the details, Scott. We will looking into implementing the necessary
> changes to get it working with rocker.
Hmmm....looks like we can only go so far using rocker. The patch
below for rocker device will set link up/down when phy is
enabled/disabled, but that only affects the local link status. The
remote will not see link down/up when the local changes because there
is no physical signalling between two VM instances (local and remote)
(duh!). I'll add the device patch to my queue just because it's a
good things to have, but at this point I'm not seeing how you can use
rocker to down the remote link.
diff --git a/hw/net/rocker/rocker_fp.c b/hw/net/rocker/rocker_fp.c
index 42354c3..d8d934c 100644
--- a/hw/net/rocker/rocker_fp.c
+++ b/hw/net/rocker/rocker_fp.c
@@ -188,8 +188,19 @@ bool fp_port_enabled(FpPort *port)
return port->enabled;
}
+static void fp_port_set_link(FpPort *port, bool up)
+{
+ NetClientState *nc = qemu_get_queue(port->nic);
+
+ if (up == nc->link_down) {
+ nc->link_down = !up;
+ nc->info->link_status_changed(nc);
+ }
+}
+
void fp_port_enable(FpPort *port)
{
+ fp_port_set_link(port, true);
port->enabled = true;
DPRINTF("port %d enabled\n", port->index);
}
@@ -197,6 +208,7 @@ void fp_port_enable(FpPort *port)
void fp_port_disable(FpPort *port)
{
port->enabled = false;
+ fp_port_set_link(port, false);
DPRINTF("port %d disabled\n", port->index);
}
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [RFC PATCH net-next v3 3/4] rocker: Handle IFF_PROTODOWN by doing a PHYS-DOWN on the switch port.
2015-04-29 5:51 ` Scott Feldman
@ 2015-04-29 22:11 ` Anuradha Karuppiah
0 siblings, 0 replies; 7+ messages in thread
From: Anuradha Karuppiah @ 2015-04-29 22:11 UTC (permalink / raw)
To: Scott Feldman
Cc: David S. Miller, Netdev, Roopa Prabhu, Andy Gospodarek, Wilson Kok
On Tue, Apr 28, 2015 at 10:51 PM, Scott Feldman <sfeldma@gmail.com> wrote:
> On Tue, Apr 28, 2015 at 1:35 PM, Anuradha Karuppiah
> <anuradhak@cumulusnetworks.com> wrote:
>> On Tue, Apr 28, 2015 at 12:48 PM, Scott Feldman <sfeldma@gmail.com> wrote:
>>> On Tue, Apr 28, 2015 at 8:49 AM, Anuradha Karuppiah
>>> <anuradhak@cumulusnetworks.com> wrote:
>>>> On Mon, Apr 27, 2015 at 10:51 PM, Scott Feldman <sfeldma@gmail.com> wrote:
>>>>> On Mon, Apr 27, 2015 at 10:38 AM, <anuradhak@cumulusnetworks.com> wrote:
>>>>>> From: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>>>>>>
>>>>>> IFF_PROTODOWN can be set by user space applications like MLAG on detecting
>>>>>> errors on a switch port. This patch provides sample switch driver changes
>>>>>> for handling IFF_PROTODOWN. Rocker PHYS disables the port in response to
>>>>>> protodown.
>>>>>>
>>>>>> Note: I understand Scott has some rocker changes on hold. I will re-spin
>>>>>> this patch once his changes are in.
>>>>>>
>>>>>> Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
>>>>>> Signed-off-by: Andy Gospodarek <gospo@cumulusnetworks.com>
>>>>>> Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
>>>>>> Signed-off-by: Wilson Kok <wkok@cumulusnetworks.com>
>>>>>> ---
>>>>>> drivers/net/ethernet/rocker/rocker.c | 16 +++++++++++++++-
>>>>>> 1 file changed, 15 insertions(+), 1 deletion(-)
>>>>>>
>>>>>> diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
>>>>>> index a87b177..e3084e3 100644
>>>>>> --- a/drivers/net/ethernet/rocker/rocker.c
>>>>>> +++ b/drivers/net/ethernet/rocker/rocker.c
>>>>>> @@ -3838,7 +3838,8 @@ static int rocker_port_open(struct net_device *dev)
>>>>>>
>>>>>> napi_enable(&rocker_port->napi_tx);
>>>>>> napi_enable(&rocker_port->napi_rx);
>>>>>> - rocker_port_set_enable(rocker_port, true);
>>>>>> + if (!(dev->flags & IFF_PROTO_DOWN))
>>>>>> + rocker_port_set_enable(rocker_port, true);
>>>>>> netif_start_queue(dev);
>>>>>> return 0;
>>>>>>
>>>>>> @@ -4238,6 +4239,18 @@ static int rocker_port_swdev_port_stp_update(struct net_device *dev, u8 state)
>>>>>> return rocker_port_stp_update(rocker_port, state);
>>>>>> }
>>>>>>
>>>>>> +static int rocker_port_swdev_port_phy_state_set(struct net_device *dev,
>>>>>> + bool enable)
>>>>>> +{
>>>>>> + struct rocker_port *rocker_port = netdev_priv(dev);
>>>>>> +
>>>>>> + if (enable && (dev->flags & IFF_UP) && !(dev->flags & IFF_PROTO_DOWN))
>>>>>> + rocker_port_set_enable(rocker_port, true);
>>>>>> + else
>>>>>> + rocker_port_set_enable(rocker_port, false);
>>>>>
>>>>> This isn't working like your expecting. PHY link is still up on the
>>>>> rocker port, so the other end of the wire still sees link UP even when
>>>>> IFF_PROTO_DOWN is set locally.
>>>>
>>>> I wanted to check with you first on the rocker handling; that is the main
>>>> reason for posting this an RFC (thanks for the review).
>>>>
>>>> I used rocker_port_set_enable/PORT_PHYS_ENABLE for setting the phy state
>>>> because I assumed that in the case of an offloaded switch driver it would be
>>>> the equivalent of doing "sdk port N en=1|0". Is that not the case? If not,
>>>> could you please point me in the right direction?
>>>
>>> To put PHY link down, on PORT_PHYS_ENABLE true, rocker device (qemu)
>>> would need to down the link state for the port so other end of wire
>>> sees link down. I think I remember looking into that but didn't
>>> implement it. In qemu monitor, you can manually set the link up/down
>>> (set_link <dev> [on|off]). We'd need to call the same from within the
>>> rocker device.
>>>
>>> So if we want to be able to test this with rocker, we'll need a device
>>> and driver change.
>>
>> Thanks for the details, Scott. We will looking into implementing the necessary
>> changes to get it working with rocker.
>
> Hmmm....looks like we can only go so far using rocker. The patch
> below for rocker device will set link up/down when phy is
> enabled/disabled, but that only affects the local link status. The
> remote will not see link down/up when the local changes because there
> is no physical signalling between two VM instances (local and remote)
> (duh!). I'll add the device patch to my queue just because it's a
> good things to have, but at this point I'm not seeing how you can use
> rocker to down the remote link.
>
> diff --git a/hw/net/rocker/rocker_fp.c b/hw/net/rocker/rocker_fp.c
> index 42354c3..d8d934c 100644
> --- a/hw/net/rocker/rocker_fp.c
> +++ b/hw/net/rocker/rocker_fp.c
> @@ -188,8 +188,19 @@ bool fp_port_enabled(FpPort *port)
> return port->enabled;
> }
>
> +static void fp_port_set_link(FpPort *port, bool up)
> +{
> + NetClientState *nc = qemu_get_queue(port->nic);
> +
> + if (up == nc->link_down) {
> + nc->link_down = !up;
> + nc->info->link_status_changed(nc);
> + }
> +}
> +
> void fp_port_enable(FpPort *port)
> {
> + fp_port_set_link(port, true);
> port->enabled = true;
> DPRINTF("port %d enabled\n", port->index);
> }
> @@ -197,6 +208,7 @@ void fp_port_enable(FpPort *port)
> void fp_port_disable(FpPort *port)
> {
> port->enabled = false;
> + fp_port_set_link(port, false);
> DPRINTF("port %d disabled\n", port->index);
> }
OK, thanks for the info and for including the changes needed to do the local
phy-to-link setting in rocker.
For the proto_down handling -
1. The local switch port state does need to be down to prevent loops and to
prevent protocols from converging.
2. Remote needs to be signalled (if possible) via a carrier down to stop
sending traffic to this down port. In the case of virtual/emulated switch
ports this is not going to be possible.
I wonder if it still make sense to provide sample usage of this attribute in
rocker along with the documentation that #2 is not possible because of the
emulation restrictions. And that it would be possible in an offloaded switch
driver that did have phy control via the corresponding SDK.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-04-29 22:11 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-27 17:38 [RFC PATCH net-next v3 3/4] rocker: Handle IFF_PROTODOWN by doing a PHYS-DOWN on the switch port anuradhak
2015-04-28 5:51 ` Scott Feldman
2015-04-28 15:49 ` Anuradha Karuppiah
2015-04-28 19:48 ` Scott Feldman
2015-04-28 20:35 ` Anuradha Karuppiah
2015-04-29 5:51 ` Scott Feldman
2015-04-29 22:11 ` Anuradha Karuppiah
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).