diff options
author | Luotao Fu <l.fu@pengutronix.de> | 2009-11-25 11:04:52 +0100 |
---|---|---|
committer | Luotao Fu <l.fu@pengutronix.de> | 2009-11-25 11:29:42 +0100 |
commit | 14bb1061bc97a62ae5c74a900bc052d313c9f331 (patch) | |
tree | aebd3dc58458ed5410a8f7dbccbf6685d8ef6482 | |
parent | 6809185bf8549502c0370191749d6a5d5b77e0eb (diff) | |
download | libsocketcan-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.h | 10 | ||||
-rw-r--r-- | src/socketcan_netlink.c | 52 |
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; |