mirror of https://github.com/hak5/openwrt-owl.git
parent
0e61dc3f61
commit
3e6b3ea088
|
@ -165,40 +165,42 @@ struct rtl8366s_vlan4kentry {
|
|||
u16 member:6;
|
||||
};
|
||||
|
||||
static const char *MIBCOUNTERS[] = { "IfInOctets ",
|
||||
"EtherStatsOctets ",
|
||||
"EtherStatsUnderSizePkts ",
|
||||
"EtherFregament ",
|
||||
"EtherStatsPkts64Octets ",
|
||||
"EtherStatsPkts65to127Octets ",
|
||||
"EtherStatsPkts128to255Octets ",
|
||||
"EtherStatsPkts256to511Octets ",
|
||||
"EtherStatsPkts512to1023Octets ",
|
||||
"EtherStatsPkts1024to1518Octets ",
|
||||
"EtherOversizeStats ",
|
||||
"EtherStatsJabbers ",
|
||||
"IfInUcastPkts ",
|
||||
"EtherStatsMulticastPkts ",
|
||||
"EtherStatsBroadcastPkts ",
|
||||
"EtherStatsDropEvents ",
|
||||
"Dot3StatsFCSErrors ",
|
||||
"Dot3StatsSymbolErrors ",
|
||||
"Dot3InPauseFrames ",
|
||||
"Dot3ControlInUnknownOpcodes ",
|
||||
"IfOutOctets ",
|
||||
"Dot3StatsSingleCollisionFrames ",
|
||||
"Dot3StatMultipleCollisionFrames ",
|
||||
"Dot3sDeferredTransmissions ",
|
||||
"Dot3StatsLateCollisions ",
|
||||
"EtherStatsCollisions ",
|
||||
"Dot3StatsExcessiveCollisions ",
|
||||
"Dot3OutPauseFrames ",
|
||||
"Dot1dBasePortDelayExceededDiscards",
|
||||
"Dot1dTpPortInDiscards ",
|
||||
"IfOutUcastPkts ",
|
||||
"IfOutMulticastPkts ",
|
||||
"IfOutBroadcastPkts ",
|
||||
NULL };
|
||||
static const char *MIBCOUNTERS[] = {
|
||||
"IfInOctets ",
|
||||
"EtherStatsOctets ",
|
||||
"EtherStatsUnderSizePkts ",
|
||||
"EtherFregament ",
|
||||
"EtherStatsPkts64Octets ",
|
||||
"EtherStatsPkts65to127Octets ",
|
||||
"EtherStatsPkts128to255Octets ",
|
||||
"EtherStatsPkts256to511Octets ",
|
||||
"EtherStatsPkts512to1023Octets ",
|
||||
"EtherStatsPkts1024to1518Octets ",
|
||||
"EtherOversizeStats ",
|
||||
"EtherStatsJabbers ",
|
||||
"IfInUcastPkts ",
|
||||
"EtherStatsMulticastPkts ",
|
||||
"EtherStatsBroadcastPkts ",
|
||||
"EtherStatsDropEvents ",
|
||||
"Dot3StatsFCSErrors ",
|
||||
"Dot3StatsSymbolErrors ",
|
||||
"Dot3InPauseFrames ",
|
||||
"Dot3ControlInUnknownOpcodes ",
|
||||
"IfOutOctets ",
|
||||
"Dot3StatsSingleCollisionFrames ",
|
||||
"Dot3StatMultipleCollisionFrames ",
|
||||
"Dot3sDeferredTransmissions ",
|
||||
"Dot3StatsLateCollisions ",
|
||||
"EtherStatsCollisions ",
|
||||
"Dot3StatsExcessiveCollisions ",
|
||||
"Dot3OutPauseFrames ",
|
||||
"Dot1dBasePortDelayExceededDiscards",
|
||||
"Dot1dTpPortInDiscards ",
|
||||
"IfOutUcastPkts ",
|
||||
"IfOutMulticastPkts ",
|
||||
"IfOutBroadcastPkts ",
|
||||
NULL,
|
||||
};
|
||||
|
||||
struct rtl8366_smi {
|
||||
struct platform_device *pdev;
|
||||
|
@ -207,7 +209,7 @@ struct rtl8366_smi {
|
|||
struct mii_bus *mii_bus;
|
||||
struct switch_dev dev;
|
||||
int mii_irq[PHY_MAX_ADDR];
|
||||
char buf[4096];
|
||||
char buf[4096];
|
||||
#ifdef CONFIG_RTL8366_SMI_DEBUG_FS
|
||||
struct dentry *debugfs_root;
|
||||
#endif
|
||||
|
@ -561,10 +563,11 @@ static int rtl8366_get_mib_counter(struct rtl8366_smi *smi, int counter,
|
|||
|
||||
addr = RTL8366S_MIB_COUNTER_BASE + regoffset;
|
||||
|
||||
|
||||
/* writing access counter address first */
|
||||
/* then ASIC will prepare 64bits counter wait for being retrived */
|
||||
data = 0;/* writing data will be discard by ASIC */
|
||||
/*
|
||||
* Writing access counter address first
|
||||
* then ASIC will prepare 64bits counter wait for being retrived
|
||||
*/
|
||||
data = 0; /* writing data will be discard by ASIC */
|
||||
err = rtl8366_smi_write_reg(smi, addr, data);
|
||||
if (err)
|
||||
return err;
|
||||
|
@ -697,7 +700,6 @@ static int rtl8366s_get_vlan_member_config(struct rtl8366_smi *smi, u32 index,
|
|||
tableaddr = (u16 *)vlanmc;
|
||||
|
||||
addr = RTL8366S_VLAN_MEMCONF_BASE + (index << 1);
|
||||
|
||||
err = rtl8366_smi_read_reg(smi, addr, &data);
|
||||
if (err)
|
||||
return err;
|
||||
|
@ -706,7 +708,6 @@ static int rtl8366s_get_vlan_member_config(struct rtl8366_smi *smi, u32 index,
|
|||
tableaddr++;
|
||||
|
||||
addr = RTL8366S_VLAN_MEMCONF_BASE + 1 + (index << 1);
|
||||
|
||||
err = rtl8366_smi_read_reg(smi, addr, &data);
|
||||
if (err)
|
||||
return err;
|
||||
|
@ -726,16 +727,15 @@ static int rtl8366s_set_vlan_member_config(struct rtl8366_smi *smi, u32 index,
|
|||
u16 *tableaddr;
|
||||
|
||||
if (index >= RTL8366_NUM_VLANS ||
|
||||
vlanmc->vid >= RTL8366_NUM_VIDS ||
|
||||
vlanmc->priority > RTL8366S_PRIORITYMAX ||
|
||||
vlanmc->member > RTL8366_PORT_ALL ||
|
||||
vlanmc->untag > RTL8366_PORT_ALL ||
|
||||
vlanmc->fid > RTL8366S_FIDMAX)
|
||||
vlanmc->vid >= RTL8366_NUM_VIDS ||
|
||||
vlanmc->priority > RTL8366S_PRIORITYMAX ||
|
||||
vlanmc->member > RTL8366_PORT_ALL ||
|
||||
vlanmc->untag > RTL8366_PORT_ALL ||
|
||||
vlanmc->fid > RTL8366S_FIDMAX)
|
||||
return -EINVAL;
|
||||
|
||||
addr = RTL8366S_VLAN_MEMCONF_BASE + (index << 1);
|
||||
|
||||
|
||||
tableaddr = (u16 *)vlanmc;
|
||||
data = *tableaddr;
|
||||
|
||||
|
@ -774,7 +774,6 @@ static int rtl8366_get_port_vlan_index(struct rtl8366_smi *smi, int port,
|
|||
return -EINVAL;
|
||||
|
||||
addr = RTL8366S_PORT_VLAN_CTRL_BASE + addroffset[port];
|
||||
|
||||
err = rtl8366_smi_read_reg(smi, addr, &data);
|
||||
if (err)
|
||||
return err;
|
||||
|
@ -788,9 +787,9 @@ static int rtl8366_get_port_vlan_index(struct rtl8366_smi *smi, int port,
|
|||
static int rtl8366_get_vlan_port_pvid(struct rtl8366_smi *smi, int port,
|
||||
int *val)
|
||||
{
|
||||
struct rtl8366s_vlanconfig vlanmc;
|
||||
int err;
|
||||
int index;
|
||||
struct rtl8366s_vlanconfig vlanmc;
|
||||
|
||||
err = rtl8366_get_port_vlan_index(smi, port, &index);
|
||||
if (err)
|
||||
|
@ -854,16 +853,16 @@ static int rtl8366_set_vlan_port_pvid(struct rtl8366_smi *smi, int port,
|
|||
if (port >= RTL8366_NUM_PORTS || val >= RTL8366_NUM_VIDS)
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
|
||||
/* Updating the 4K entry; lookup it and change the port member set */
|
||||
rtl8366s_get_vlan_4k_entry(smi, val, &vlan4k);
|
||||
vlan4k.member |= ((1 << port) | RTL8366_PORT_CPU);
|
||||
vlan4k.untag = RTL8366_PORT_ALL_BUT_CPU;
|
||||
rtl8366s_set_vlan_4k_entry(smi, &vlan4k);
|
||||
|
||||
/* For the 16 entries more work needs to be done. First see if such
|
||||
VID is already there and change it */
|
||||
/*
|
||||
* For the 16 entries more work needs to be done. First see if such
|
||||
* VID is already there and change it
|
||||
*/
|
||||
for (i = 0; i < RTL8366_NUM_VLANS; ++i) {
|
||||
rtl8366s_get_vlan_member_config(smi, i, &vlanmc);
|
||||
|
||||
|
@ -879,13 +878,17 @@ static int rtl8366_set_vlan_port_pvid(struct rtl8366_smi *smi, int port,
|
|||
}
|
||||
}
|
||||
|
||||
/* PVID could not be found from vlan table. Replace unused (one that
|
||||
has no member ports) with new one */
|
||||
/*
|
||||
* PVID could not be found from vlan table. Replace unused (one that
|
||||
* has no member ports) with new one
|
||||
*/
|
||||
for (i = 0; i < RTL8366_NUM_VLANS; ++i) {
|
||||
rtl8366s_get_vlan_member_config(smi, i, &vlanmc);
|
||||
|
||||
/* See if this vlan member configuration is unused. It is
|
||||
unused if member set contains no ports or CPU port only */
|
||||
/*
|
||||
* See if this vlan member configuration is unused. It is
|
||||
* unused if member set contains no ports or CPU port only
|
||||
*/
|
||||
if (!vlanmc.member || vlanmc.member == RTL8366_PORT_CPU) {
|
||||
vlanmc.vid = val;
|
||||
vlanmc.priority = 0;
|
||||
|
@ -902,8 +905,9 @@ static int rtl8366_set_vlan_port_pvid(struct rtl8366_smi *smi, int port,
|
|||
}
|
||||
}
|
||||
|
||||
dev_err(&smi->pdev->dev, "All 16 vlan member configurations are in "
|
||||
"use\n");
|
||||
dev_err(&smi->pdev->dev,
|
||||
"All 16 vlan member configurations are in use\n");
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -911,6 +915,7 @@ static int rtl8366_set_vlan_port_pvid(struct rtl8366_smi *smi, int port,
|
|||
static int rtl8366_vlan_set_vlan(struct rtl8366_smi *smi, int enable)
|
||||
{
|
||||
u32 data = 0;
|
||||
|
||||
rtl8366_smi_read_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, &data);
|
||||
|
||||
data &= ~(data & RTL8366_CHIP_CTRL_VLAN);
|
||||
|
@ -923,6 +928,7 @@ static int rtl8366_vlan_set_vlan(struct rtl8366_smi *smi, int enable)
|
|||
static int rtl8366_vlan_set_4ktable(struct rtl8366_smi *smi, int enable)
|
||||
{
|
||||
u32 data = 0;
|
||||
|
||||
rtl8366_smi_read_reg(smi, RTL8366S_VLAN_TB_CTRL_REG, &data);
|
||||
|
||||
data &= ~(data & 1);
|
||||
|
@ -981,8 +987,8 @@ static ssize_t rtl8366_read_debugfs_mibs(struct file *file,
|
|||
char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
int i, j, len = 0;
|
||||
struct rtl8366_smi *smi = (struct rtl8366_smi *)file->private_data;
|
||||
int i, j, len = 0;
|
||||
char *buf = smi->buf;
|
||||
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "MIB Counters:\n");
|
||||
|
@ -992,17 +998,18 @@ static ssize_t rtl8366_read_debugfs_mibs(struct file *file,
|
|||
"Port 4\n");
|
||||
|
||||
for (i = 0; i < 33; ++i) {
|
||||
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "%d:%s ",
|
||||
i, MIBCOUNTERS[i]);
|
||||
for (j = 0; j < RTL8366_NUM_PORTS; ++j) {
|
||||
unsigned long long counter = 0;
|
||||
|
||||
if (!rtl8366_get_mib_counter(smi, i, j, &counter))
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
len += snprintf(buf + len,
|
||||
sizeof(smi->buf) - len,
|
||||
"[%llu]", counter);
|
||||
else
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
len += snprintf(buf + len,
|
||||
sizeof(smi->buf) - len,
|
||||
"[error]");
|
||||
|
||||
if (j != RTL8366_NUM_PORTS - 1) {
|
||||
|
@ -1011,7 +1018,8 @@ static ssize_t rtl8366_read_debugfs_mibs(struct file *file,
|
|||
sizeof(smi->buf) - len,
|
||||
"\t");
|
||||
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
len += snprintf(buf + len,
|
||||
sizeof(smi->buf) - len,
|
||||
"\t");
|
||||
}
|
||||
}
|
||||
|
@ -1027,11 +1035,12 @@ static ssize_t rtl8366_read_debugfs_vlan(struct file *file,
|
|||
char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
int i, j, len = 0;
|
||||
struct rtl8366_smi *smi = (struct rtl8366_smi *)file->private_data;
|
||||
int i, j, len = 0;
|
||||
char *buf = smi->buf;
|
||||
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "VLAN Member Config:\n");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"VLAN Member Config:\n");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"\t id \t vid \t prio \t member \t untag \t fid "
|
||||
"\tports\n");
|
||||
|
@ -1065,9 +1074,9 @@ static ssize_t rtl8366_read_debugfs_reg(struct file *file,
|
|||
char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct rtl8366_smi *smi = (struct rtl8366_smi *)file->private_data;
|
||||
u32 t, reg = g_dbg_reg;
|
||||
int err, len = 0;
|
||||
struct rtl8366_smi *smi = (struct rtl8366_smi *)file->private_data;
|
||||
char *buf = smi->buf;
|
||||
|
||||
memset(buf, '\0', sizeof(smi->buf));
|
||||
|
@ -1089,11 +1098,11 @@ static ssize_t rtl8366_write_debugfs_reg(struct file *file,
|
|||
const char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct rtl8366_smi *smi = (struct rtl8366_smi *)file->private_data;
|
||||
unsigned long data;
|
||||
u32 reg = g_dbg_reg;
|
||||
int err;
|
||||
size_t len;
|
||||
struct rtl8366_smi *smi = (struct rtl8366_smi *)file->private_data;
|
||||
char *buf = smi->buf;
|
||||
|
||||
len = min(count, sizeof(smi->buf) - 1);
|
||||
|
@ -1170,16 +1179,16 @@ static void rtl8366_debugfs_init(struct rtl8366_smi *smi)
|
|||
node = debugfs_create_file("vlan", S_IRUSR, root, smi,
|
||||
&fops_rtl8366_vlan);
|
||||
if (!node) {
|
||||
dev_err(&smi->pdev->dev, "Creating debugfs file vlan "
|
||||
"failed\n");
|
||||
dev_err(&smi->pdev->dev,
|
||||
"Creating debugfs file vlan failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
node = debugfs_create_file("mibs", S_IRUSR, root, smi,
|
||||
&fops_rtl8366_mibs);
|
||||
if (!node) {
|
||||
dev_err(&smi->pdev->dev, "Creating debugfs file mibs "
|
||||
"xfailed\n");
|
||||
dev_err(&smi->pdev->dev,
|
||||
"Creating debugfs file mibs failed\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1201,8 +1210,8 @@ static int rtl8366_global_reset_mibs(struct switch_dev *dev,
|
|||
const struct switch_attr *attr,
|
||||
struct switch_val *val)
|
||||
{
|
||||
u32 data = 0;
|
||||
struct rtl8366_smi *smi = sw_to_rtl8366(dev);
|
||||
u32 data = 0;
|
||||
|
||||
if (val->value.i == 1) {
|
||||
rtl8366_smi_read_reg(smi, RTL8366S_MIB_CTRL_REG, &data);
|
||||
|
@ -1217,8 +1226,8 @@ static int rtl8366_get_vlan(struct switch_dev *dev,
|
|||
const struct switch_attr *attr,
|
||||
struct switch_val *val)
|
||||
{
|
||||
u32 data;
|
||||
struct rtl8366_smi *smi = sw_to_rtl8366(dev);
|
||||
u32 data;
|
||||
|
||||
if (attr->ofs == 1) {
|
||||
rtl8366_smi_read_reg(smi, RTL8366_CHIP_GLOBAL_CTRL_REG, &data);
|
||||
|
@ -1243,8 +1252,9 @@ static int rtl8366_global_get_blinkrate(struct switch_dev *dev,
|
|||
const struct switch_attr *attr,
|
||||
struct switch_val *val)
|
||||
{
|
||||
u32 data;
|
||||
struct rtl8366_smi *smi = sw_to_rtl8366(dev);
|
||||
u32 data;
|
||||
|
||||
rtl8366_smi_read_reg(smi, RTL8366_LED_BLINKRATE_REG, &data);
|
||||
|
||||
val->value.i = (data & (RTL8366_LED_BLINKRATE_MASK));
|
||||
|
@ -1322,23 +1332,31 @@ static int rtl8366_attr_get_port_link(struct switch_dev *dev,
|
|||
"Link DOWN, Speed: ");
|
||||
|
||||
if (speed == 0)
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "10Base-TX ");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"10Base-TX ");
|
||||
else if (speed == 1)
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "100Base-TX ");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"100Base-TX ");
|
||||
else if (speed == 2)
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "1000Base-TX ");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"1000Base-TX ");
|
||||
|
||||
if (duplex)
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "Full-Duplex, ");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"Full-Duplex, ");
|
||||
else
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "Half-Duplex, ");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"Half-Duplex, ");
|
||||
|
||||
if (txpause)
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "TX-Pause ");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"TX-Pause ");
|
||||
if (rxpause)
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "RX-Pause ");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"RX-Pause ");
|
||||
if (nway)
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "nway ");
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"nway ");
|
||||
|
||||
val->value.s = buf;
|
||||
val->len = len;
|
||||
|
@ -1372,7 +1390,8 @@ static int rtl8366_attr_get_vlan_info(struct switch_dev *dev,
|
|||
int index = 0;
|
||||
if (!rtl8366_get_port_vlan_index(smi, i, &index) &&
|
||||
index == val->port_vlan)
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "%d", i);
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"%d", i);
|
||||
}
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "\n");
|
||||
|
||||
|
@ -1398,8 +1417,9 @@ static int rtl8366_set_port_led(struct switch_dev *dev,
|
|||
const struct switch_attr *attr,
|
||||
struct switch_val *val)
|
||||
{
|
||||
u32 data = 0;
|
||||
struct rtl8366_smi *smi = sw_to_rtl8366(dev);
|
||||
u32 data = 0;
|
||||
|
||||
if (val->port_vlan >= RTL8366_NUM_PORTS ||
|
||||
(1 << val->port_vlan) == RTL8366_PORT_UNKNOWN)
|
||||
return -EINVAL;
|
||||
|
@ -1422,8 +1442,9 @@ static int rtl8366_get_port_led(struct switch_dev *dev,
|
|||
const struct switch_attr *attr,
|
||||
struct switch_val *val)
|
||||
{
|
||||
u32 data = 0;
|
||||
struct rtl8366_smi *smi = sw_to_rtl8366(dev);
|
||||
u32 data = 0;
|
||||
|
||||
if (val->port_vlan >= RTL8366_NUM_LEDGROUPS)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -1437,8 +1458,9 @@ static int rtl8366_reset_port_mibs(struct switch_dev *dev,
|
|||
const struct switch_attr *attr,
|
||||
struct switch_val *val)
|
||||
{
|
||||
u32 data = 0;
|
||||
struct rtl8366_smi *smi = sw_to_rtl8366(dev);
|
||||
u32 data = 0;
|
||||
|
||||
if (val->port_vlan >= RTL8366_NUM_PORTS)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -1453,18 +1475,19 @@ static int rtl8366_get_port_mib(struct switch_dev *dev,
|
|||
const struct switch_attr *attr,
|
||||
struct switch_val *val)
|
||||
{
|
||||
struct rtl8366_smi *smi = sw_to_rtl8366(dev);
|
||||
int i, len = 0;
|
||||
unsigned long long counter = 0;
|
||||
struct rtl8366_smi *smi = sw_to_rtl8366(dev);
|
||||
char *buf = smi->buf;
|
||||
|
||||
if (val->port_vlan >= RTL8366_NUM_PORTS)
|
||||
return -EINVAL;
|
||||
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len, "Port %d MIB counters\n",
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"Port %d MIB counters\n",
|
||||
val->port_vlan);
|
||||
for (i = 0; i < RTL8366S_MIB_COUNT; ++i) {
|
||||
|
||||
for (i = 0; i < RTL8366S_MIB_COUNT; ++i) {
|
||||
len += snprintf(buf + len, sizeof(smi->buf) - len,
|
||||
"%d:%s\t", i, MIBCOUNTERS[i]);
|
||||
if (!rtl8366_get_mib_counter(smi, i, val->port_vlan, &counter))
|
||||
|
@ -1588,8 +1611,7 @@ static struct switch_attr rtl8366_globals[] = {
|
|||
.get = rtl8366_get_vlan,
|
||||
.max = 1,
|
||||
.ofs = 1
|
||||
},
|
||||
{
|
||||
}, {
|
||||
.type = SWITCH_TYPE_INT,
|
||||
.name = "enable_vlan4k",
|
||||
.description = "Enable VLAN 4K mode",
|
||||
|
@ -1597,16 +1619,14 @@ static struct switch_attr rtl8366_globals[] = {
|
|||
.get = rtl8366_get_vlan,
|
||||
.max = 1,
|
||||
.ofs = 2
|
||||
},
|
||||
{
|
||||
}, {
|
||||
.type = SWITCH_TYPE_INT,
|
||||
.name = "reset_mibs",
|
||||
.description = "Reset all MIB counters",
|
||||
.set = rtl8366_global_reset_mibs,
|
||||
.get = NULL,
|
||||
.max = 1
|
||||
},
|
||||
{
|
||||
}, {
|
||||
.type = SWITCH_TYPE_INT,
|
||||
.name = "blinkrate",
|
||||
.description = "Get/Set LED blinking rate (0 = 43ms, 1 = 84ms,"
|
||||
|
@ -1625,24 +1645,21 @@ static struct switch_attr rtl8366_port[] = {
|
|||
.max = 1,
|
||||
.set = NULL,
|
||||
.get = rtl8366_attr_get_port_link
|
||||
},
|
||||
{
|
||||
}, {
|
||||
.type = SWITCH_TYPE_INT,
|
||||
.name = "reset_mib",
|
||||
.description = "Reset single port MIB counters",
|
||||
.max = 1,
|
||||
.set = rtl8366_reset_port_mibs,
|
||||
.get = NULL
|
||||
},
|
||||
{
|
||||
}, {
|
||||
.type = SWITCH_TYPE_STRING,
|
||||
.name = "mib",
|
||||
.description = "Get MIB counters for port",
|
||||
.max = 33,
|
||||
.set = NULL,
|
||||
.get = rtl8366_get_port_mib
|
||||
},
|
||||
{
|
||||
}, {
|
||||
.type = SWITCH_TYPE_INT,
|
||||
.name = "led",
|
||||
.description = "Get/Set port group (0 - 3) led mode (0 - 15)",
|
||||
|
|
Loading…
Reference in New Issue