[][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);