3 #include "qmi-message.h"
5 static struct qmi_wds_start_network_request wds_sn_req = {
6 QMI_INIT(authentication_preference,
7 QMI_WDS_AUTHENTICATION_PAP | QMI_WDS_AUTHENTICATION_CHAP),
9 static struct qmi_wds_stop_network_request wds_stn_req;
11 #define cmd_wds_set_auth_cb no_cb
12 static enum qmi_cmd_result
13 cmd_wds_set_auth_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
17 QmiWdsAuthentication auth;
19 { "pap", QMI_WDS_AUTHENTICATION_PAP },
20 { "chap", QMI_WDS_AUTHENTICATION_CHAP },
21 { "both", QMI_WDS_AUTHENTICATION_PAP | QMI_WDS_AUTHENTICATION_CHAP },
22 { "none", QMI_WDS_AUTHENTICATION_NONE },
26 for (i = 0; i < ARRAY_SIZE(modes); i++) {
27 if (strcasecmp(modes[i].name, arg) != 0)
30 qmi_set(&wds_sn_req, authentication_preference, modes[i].auth);
34 uqmi_add_error("Invalid auth mode (valid: pap, chap, both, none)");
38 #define cmd_wds_set_username_cb no_cb
39 static enum qmi_cmd_result
40 cmd_wds_set_username_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
42 qmi_set_ptr(&wds_sn_req, username, arg);
46 #define cmd_wds_set_password_cb no_cb
47 static enum qmi_cmd_result
48 cmd_wds_set_password_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
50 qmi_set_ptr(&wds_sn_req, password, arg);
54 #define cmd_wds_set_autoconnect_cb no_cb
55 static enum qmi_cmd_result
56 cmd_wds_set_autoconnect_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
58 qmi_set(&wds_sn_req, enable_autoconnect, true);
59 qmi_set(&wds_stn_req, disable_autoconnect, true);
64 cmd_wds_start_network_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg)
66 struct qmi_wds_start_network_response res;
68 qmi_parse_wds_start_network_response(msg, &res);
69 if (res.set.packet_data_handle)
70 blobmsg_add_u32(&status, NULL, res.data.packet_data_handle);
73 static enum qmi_cmd_result
74 cmd_wds_start_network_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
76 qmi_set_ptr(&wds_sn_req, apn, arg);
77 qmi_set_wds_start_network_request(msg, &wds_sn_req);
78 return QMI_CMD_REQUEST;
81 #define cmd_wds_stop_network_cb no_cb
82 static enum qmi_cmd_result
83 cmd_wds_stop_network_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
85 uint32_t pdh = strtoul(arg, NULL, 0);
87 qmi_set(&wds_stn_req, packet_data_handle, pdh);
88 qmi_set_wds_stop_network_request(msg, &wds_stn_req);
89 return QMI_CMD_REQUEST;
93 cmd_wds_get_packet_service_status_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg)
95 struct qmi_wds_get_packet_service_status_response res;
96 const char *data_status[] = {
97 [QMI_WDS_CONNECTION_STATUS_UNKNOWN] = "unknown",
98 [QMI_WDS_CONNECTION_STATUS_DISCONNECTED] = "disconnected",
99 [QMI_WDS_CONNECTION_STATUS_CONNECTED] = "connected",
100 [QMI_WDS_CONNECTION_STATUS_SUSPENDED] = "suspended",
101 [QMI_WDS_CONNECTION_STATUS_AUTHENTICATING] = "authenticating",
105 qmi_parse_wds_get_packet_service_status_response(msg, &res);
106 if (res.set.connection_status &&
107 res.data.connection_status >= 0 &&
108 res.data.connection_status < ARRAY_SIZE(data_status))
109 s = res.data.connection_status;
111 blobmsg_add_string(&status, NULL, data_status[s]);
114 static enum qmi_cmd_result
115 cmd_wds_get_packet_service_status_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
117 qmi_set_wds_get_packet_service_status_request(msg);
118 return QMI_CMD_REQUEST;
121 #define cmd_wds_reset_cb no_cb
122 static enum qmi_cmd_result
123 cmd_wds_reset_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
125 qmi_set_wds_reset_request(msg);
126 return QMI_CMD_REQUEST;