[][Change switch command to try ioctl first]
[Description]
Change switch command to try ioctl first.
[Release-log]
N/A
Change-Id: I75e34a8e621d3fc35ad39ff46cb12fb3b74c0577
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/4585296
diff --git a/feed/switch/src/switch_753x.c b/feed/switch/src/switch_753x.c
index d0e1fc2..4775516 100644
--- a/feed/switch/src/switch_753x.c
+++ b/feed/switch/src/switch_753x.c
@@ -320,24 +320,26 @@
attres->dev_id = -1;
attres->port_num = -1;
attres->phy_dev = -1;
- nl_init_flag = true;
+ nl_init_flag = false;
- err = mt753x_netlink_init(MT753X_DSA_GENL_NAME);
+ err = switch_ioctl_init();
if (!err)
chip_name = get_chip_name();
/* dsa netlink family might not be enabled. Try gsw netlink family. */
if (err < 0 || chip_name < 0) {
- err = mt753x_netlink_init(MT753X_GENL_NAME);
+ nl_init_flag = true;
+
+ err = mt753x_netlink_init(MT753X_DSA_GENL_NAME);
if (!err)
chip_name = get_chip_name();
}
if (err < 0 || chip_name < 0) {
- nl_init_flag = false;
+ err = mt753x_netlink_init(MT753X_GENL_NAME);
+ if (!err)
+ chip_name = get_chip_name();
- switch_ioctl_init();
- chip_name = get_chip_name();
if (chip_name < 0) {
printf("no chip unsupport or chip id is invalid!\n");
exit_free();
diff --git a/feed/switch/src/switch_ioctl.c b/feed/switch/src/switch_ioctl.c
index 082eab1..094bfc7 100644
--- a/feed/switch/src/switch_ioctl.c
+++ b/feed/switch/src/switch_ioctl.c
@@ -2,6 +2,7 @@
* switch_ioctl.c: switch(ioctl) set API
*/
+#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -15,13 +16,15 @@
static int esw_fd;
-void switch_ioctl_init(void)
+int switch_ioctl_init(void)
{
esw_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (esw_fd < 0) {
perror("socket");
- exit(0);
+ return -EINVAL;
}
+
+ return 0;
}
void switch_ioctl_fini(void)
diff --git a/feed/switch/src/switch_ioctl.h b/feed/switch/src/switch_ioctl.h
index b0b4993..dffe9c7 100644
--- a/feed/switch/src/switch_ioctl.h
+++ b/feed/switch/src/switch_ioctl.h
@@ -54,7 +54,7 @@
extern int chip_name;
-void switch_ioctl_init(void);
+int switch_ioctl_init(void);
void switch_ioctl_fini(void);
int reg_read_ioctl(unsigned int offset, unsigned int *value);
int reg_write_ioctl(unsigned int offset, unsigned int value);