mirror of
https://github.com/immortalwrt/immortalwrt
synced 2025-01-08 12:08:13 +08:00
netifd: fix auto-negotiate for out-of-tree ethernet drivers
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
parent
e252dd0177
commit
891bf5b61d
@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=netifd
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git
|
||||
|
@ -0,0 +1,148 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
Date: Fri, 24 Feb 2023 13:28:52 +0800
|
||||
Subject: [PATCH] Revert "device: add support for configuring device link
|
||||
speed/duplex"
|
||||
|
||||
Fixes auto-negotiate for out-of-tree ethernet drivers.
|
||||
|
||||
This reverts commit 1eb0fafaa9865b729509a7d47ecf1f05c2c0595c.
|
||||
---
|
||||
device.c | 14 --------------
|
||||
device.h | 6 ------
|
||||
system-linux.c | 52 --------------------------------------------------
|
||||
3 files changed, 72 deletions(-)
|
||||
|
||||
--- a/device.c
|
||||
+++ b/device.c
|
||||
@@ -61,8 +61,6 @@ static const struct blobmsg_policy dev_a
|
||||
[DEV_ATTR_DROP_UNSOLICITED_NA] = { .name = "drop_unsolicited_na", .type = BLOBMSG_TYPE_BOOL },
|
||||
[DEV_ATTR_ARP_ACCEPT] = { .name = "arp_accept", .type = BLOBMSG_TYPE_BOOL },
|
||||
[DEV_ATTR_AUTH] = { .name = "auth", .type = BLOBMSG_TYPE_BOOL },
|
||||
- [DEV_ATTR_SPEED] = { .name = "speed", .type = BLOBMSG_TYPE_INT32 },
|
||||
- [DEV_ATTR_DUPLEX] = { .name = "duplex", .type = BLOBMSG_TYPE_BOOL },
|
||||
};
|
||||
|
||||
const struct uci_blob_param_list device_attr_list = {
|
||||
@@ -278,8 +276,6 @@ device_merge_settings(struct device *dev
|
||||
n->arp_accept = s->flags & DEV_OPT_ARP_ACCEPT ?
|
||||
s->arp_accept : os->arp_accept;
|
||||
n->auth = s->flags & DEV_OPT_AUTH ? s->auth : os->auth;
|
||||
- n->speed = s->flags & DEV_OPT_SPEED ? s->speed : os->speed;
|
||||
- n->duplex = s->flags & DEV_OPT_DUPLEX ? s->duplex : os->duplex;
|
||||
n->flags = s->flags | os->flags | os->valid_flags;
|
||||
}
|
||||
|
||||
@@ -454,16 +450,6 @@ device_init_settings(struct device *dev,
|
||||
s->flags |= DEV_OPT_AUTH;
|
||||
}
|
||||
|
||||
- if ((cur = tb[DEV_ATTR_SPEED])) {
|
||||
- s->speed = blobmsg_get_u32(cur);
|
||||
- s->flags |= DEV_OPT_SPEED;
|
||||
- }
|
||||
-
|
||||
- if ((cur = tb[DEV_ATTR_DUPLEX])) {
|
||||
- s->duplex = blobmsg_get_bool(cur);
|
||||
- s->flags |= DEV_OPT_DUPLEX;
|
||||
- }
|
||||
-
|
||||
device_set_disabled(dev, disabled);
|
||||
}
|
||||
|
||||
--- a/device.h
|
||||
+++ b/device.h
|
||||
@@ -60,8 +60,6 @@ enum {
|
||||
DEV_ATTR_DROP_UNSOLICITED_NA,
|
||||
DEV_ATTR_ARP_ACCEPT,
|
||||
DEV_ATTR_AUTH,
|
||||
- DEV_ATTR_SPEED,
|
||||
- DEV_ATTR_DUPLEX,
|
||||
__DEV_ATTR_MAX,
|
||||
};
|
||||
|
||||
@@ -124,8 +122,6 @@ enum {
|
||||
DEV_OPT_DROP_GRATUITOUS_ARP = (1ULL << 27),
|
||||
DEV_OPT_DROP_UNSOLICITED_NA = (1ULL << 28),
|
||||
DEV_OPT_ARP_ACCEPT = (1ULL << 29),
|
||||
- DEV_OPT_SPEED = (1ULL << 30),
|
||||
- DEV_OPT_DUPLEX = (1ULL << 31),
|
||||
};
|
||||
|
||||
/* events broadcasted to all users of a device */
|
||||
@@ -201,8 +197,6 @@ struct device_settings {
|
||||
bool drop_unsolicited_na;
|
||||
bool arp_accept;
|
||||
bool auth;
|
||||
- unsigned int speed;
|
||||
- bool duplex;
|
||||
};
|
||||
|
||||
/*
|
||||
--- a/system-linux.c
|
||||
+++ b/system-linux.c
|
||||
@@ -1715,57 +1715,6 @@ int system_vlandev_del(struct device *vl
|
||||
return system_link_del(vlandev->ifname);
|
||||
}
|
||||
|
||||
-static void
|
||||
-system_set_ethtool_settings(struct device *dev, struct device_settings *s)
|
||||
-{
|
||||
- struct ethtool_cmd ecmd = {
|
||||
- .cmd = ETHTOOL_GSET,
|
||||
- };
|
||||
- struct ifreq ifr = {
|
||||
- .ifr_data = (caddr_t)&ecmd,
|
||||
- };
|
||||
- static const struct {
|
||||
- int speed;
|
||||
- uint8_t bit_half;
|
||||
- uint8_t bit_full;
|
||||
- } speed_mask[] = {
|
||||
- { 10, ETHTOOL_LINK_MODE_10baseT_Half_BIT, ETHTOOL_LINK_MODE_10baseT_Full_BIT },
|
||||
- { 100, ETHTOOL_LINK_MODE_100baseT_Half_BIT, ETHTOOL_LINK_MODE_100baseT_Full_BIT },
|
||||
- { 1000, ETHTOOL_LINK_MODE_1000baseT_Half_BIT, ETHTOOL_LINK_MODE_1000baseT_Full_BIT },
|
||||
- };
|
||||
- uint32_t adv;
|
||||
- int i;
|
||||
-
|
||||
- strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name) - 1);
|
||||
-
|
||||
- if (ioctl(sock_ioctl, SIOCETHTOOL, &ifr) != 0)
|
||||
- return;
|
||||
-
|
||||
- adv = ecmd.supported;
|
||||
- for (i = 0; i < ARRAY_SIZE(speed_mask); i++) {
|
||||
- if (s->flags & DEV_OPT_DUPLEX) {
|
||||
- int bit = s->duplex ? speed_mask[i].bit_half : speed_mask[i].bit_full;
|
||||
- adv &= ~(1 << bit);
|
||||
- }
|
||||
-
|
||||
- if (!(s->flags & DEV_OPT_SPEED) ||
|
||||
- s->speed == speed_mask[i].speed)
|
||||
- continue;
|
||||
-
|
||||
- adv &= ~(1 << speed_mask[i].bit_full);
|
||||
- adv &= ~(1 << speed_mask[i].bit_half);
|
||||
- }
|
||||
-
|
||||
-
|
||||
- if (ecmd.autoneg && ecmd.advertising == adv)
|
||||
- return;
|
||||
-
|
||||
- ecmd.autoneg = 1;
|
||||
- ecmd.advertising = adv;
|
||||
- ecmd.cmd = ETHTOOL_SSET;
|
||||
- ioctl(sock_ioctl, SIOCETHTOOL, &ifr);
|
||||
-}
|
||||
-
|
||||
void
|
||||
system_if_get_settings(struct device *dev, struct device_settings *s)
|
||||
{
|
||||
@@ -1989,7 +1938,6 @@ system_if_apply_settings(struct device *
|
||||
system_set_drop_unsolicited_na(dev, s->drop_unsolicited_na ? "1" : "0");
|
||||
if (apply_mask & DEV_OPT_ARP_ACCEPT)
|
||||
system_set_arp_accept(dev, s->arp_accept ? "1" : "0");
|
||||
- system_set_ethtool_settings(dev, s);
|
||||
}
|
||||
|
||||
int system_if_up(struct device *dev)
|
Loading…
Reference in New Issue
Block a user