summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuotao Fu <l.fu@pengutronix.de>2009-11-25 11:04:52 +0100
committerLuotao Fu <l.fu@pengutronix.de>2009-11-25 11:29:42 +0100
commit14bb1061bc97a62ae5c74a900bc052d313c9f331 (patch)
treeaebd3dc58458ed5410a8f7dbccbf6685d8ef6482
parent6809185bf8549502c0370191749d6a5d5b77e0eb (diff)
downloadlibsocketcan-14bb1061bc97a62ae5c74a900bc052d313c9f331.tar.gz
libsocketcan-14bb1061bc97a62ae5c74a900bc052d313c9f331.tar.xz
API change
* parse struct can_ctrlmode directly to set_ctrl_mode * add set_bittiming, change set_bitrate internally * rename set_restart to do_restart * rerangement Signed-off-by: Luotao Fu <l.fu@pengutronix.de>
-rw-r--r--include/socketcan_netlink.h10
-rw-r--r--src/socketcan_netlink.c52
2 files changed, 33 insertions, 29 deletions
diff --git a/include/socketcan_netlink.h b/include/socketcan_netlink.h
index d5dcad1..79d27af 100644
--- a/include/socketcan_netlink.h
+++ b/include/socketcan_netlink.h
@@ -23,14 +23,16 @@
#include <linux/can/netlink.h>
-int scan_set_restart(const char *name);
-int scan_set_bitrate(const char *name, __u32 bitrate);
+int scan_do_restart(const char *name);
+
int scan_set_restart_ms(const char *name, __u32 restart_ms);
-int scan_set_ctrlmode(const char *name, __u32 mode, __u32 flags);
+int scan_set_bittiming(const char *name, struct can_bittiming *bt);
+int scan_set_ctrlmode(const char *name, struct can_ctrlmode *cm);
+int scan_set_bitrate(const char *name, __u32 bitrate);
-int scan_get_state(const char *name, int *state);
int scan_get_restart_ms(const char *name, __u32 *restart_ms);
int scan_get_bittiming(const char *name, struct can_bittiming *bt);
int scan_get_ctrlmode(const char *name, struct can_ctrlmode *cm);
+int scan_get_state(const char *name, int *state);
#endif
diff --git a/src/socketcan_netlink.c b/src/socketcan_netlink.c
index af8060e..e54370b 100644
--- a/src/socketcan_netlink.c
+++ b/src/socketcan_netlink.c
@@ -62,9 +62,8 @@ struct req_info {
__u8 restart;
__u8 disable_autorestart;
__u32 restart_ms;
- __u32 bitrate;
- __u32 ctrlmode;
- __u32 ctrlflags;
+ struct can_ctrlmode *ctrlmode;
+ struct can_bittiming *bittiming;
};
static void
@@ -388,9 +387,6 @@ static int do_set_nl_link(int fd, __u8 if_state, const char *name,
{
struct set_req req;
- struct can_bittiming bt;
- struct can_ctrlmode cm;
-
const char *type = "can";
memset(&req, 0, sizeof(req));
@@ -436,22 +432,19 @@ static int do_set_nl_link(int fd, __u8 if_state, const char *name,
addattr32(&req.n, 1024, IFLA_CAN_RESTART_MS,
req_info->restart_ms);
- if (req_info->bitrate > 0) {
- memset(&bt, 0, sizeof(bt));
- bt.bitrate = req_info->bitrate;
- addattr_l(&req.n, 1024, IFLA_CAN_BITTIMING,
- &bt, sizeof(bt));
- }
-
if (req_info->restart)
addattr32(&req.n, 1024, IFLA_CAN_RESTART, 1);
- if (req_info->ctrlmode) {
- memset(&cm, 0, sizeof(cm));
- cm.mask = req_info->ctrlmode;
- cm.flags = req_info->ctrlflags;
- addattr_l(&req.n, 1024, IFLA_CAN_CTRLMODE, &cm,
- sizeof(cm));
+ if (req_info->bittiming != NULL) {
+ addattr_l(&req.n, 1024, IFLA_CAN_BITTIMING,
+ req_info->bittiming,
+ sizeof(struct can_bittiming));
+ }
+
+ if (req_info->ctrlmode != NULL) {
+ addattr_l(&req.n, 1024, IFLA_CAN_CTRLMODE,
+ req_info->ctrlmode,
+ sizeof(struct can_ctrlmode));
}
/* mark end of data section */
@@ -502,7 +495,7 @@ err_out:
return err;
}
-int scan_set_restart(const char *name)
+int scan_do_restart(const char *name)
{
int fd;
int err = -1;
@@ -562,25 +555,34 @@ int scan_set_restart_ms(const char *name, __u32 restart_ms)
return set_link(name, &req_info);
}
-int scan_set_ctrlmode(const char *name, __u32 mode, __u32 flags)
+int scan_set_ctrlmode(const char *name, struct can_ctrlmode *cm)
{
struct req_info req_info = {
- .ctrlmode = mode,
- .ctrlflags = flags,
+ .ctrlmode = cm,
};
return set_link(name, &req_info);
}
-int scan_set_bitrate(const char *name, __u32 bitrate)
+int scan_set_bittiming(const char *name, struct can_bittiming *bt)
{
struct req_info req_info = {
- .bitrate = bitrate,
+ .bittiming = bt,
};
return set_link(name, &req_info);
}
+int scan_set_bitrate(const char *name, __u32 bitrate)
+{
+ struct can_bittiming bt;
+
+ memset(&bt, 0, sizeof(bt));
+ bt.bitrate = bitrate;
+
+ return scan_set_bittiming(name, &bt);
+}
+
int scan_get_state(const char *name, int *state)
{
int fd;