Skip to content

Commit 2b65a58

Browse files
author
Khang Nguyen
committed
mctp: Use netlink helpers
Reduce duplicated code for common mctp-netlink operations. Signed-off-by: Khang Nguyen <[email protected]>
1 parent 9f22207 commit 2b65a58

File tree

1 file changed

+14
-65
lines changed

1 file changed

+14
-65
lines changed

src/mctp.c

+14-65
Original file line numberDiff line numberDiff line change
@@ -1023,62 +1023,14 @@ static int cmd_neigh_show(struct ctx *ctx, int argc, const char **argv)
10231023
return 0;
10241024
}
10251025

1026-
struct mctp_neighalter_msg {
1027-
struct nlmsghdr nh;
1028-
struct ndmsg ndmsg;
1029-
uint8_t rta_buff[RTA_SPACE(1) + RTA_SPACE(MAX_ADDR_LEN)];
1030-
};
1031-
1032-
static int fill_neighalter_args(struct ctx *ctx,
1033-
struct mctp_neighalter_msg *msg,
1034-
struct rtattr **prta, size_t *prta_len,
1035-
const char *eidstr, const char *linkstr) {
1036-
struct rtattr *rta;
1037-
uint32_t tmp;
1038-
uint8_t eid;
1039-
int ifindex;
1040-
size_t rta_len;
1041-
1042-
ifindex = mctp_nl_ifindex_byname(ctx->nl, linkstr);
1043-
if (!ifindex) {
1044-
warnx("invalid device %s", linkstr);
1045-
return -1;
1046-
}
1047-
1048-
if (parse_uint32(eidstr, &tmp) < 0 || tmp > 0xff) {
1049-
warnx("invalid address %s", eidstr);
1050-
return -1;
1051-
}
1052-
eid = tmp & 0xff;
1053-
1054-
memset(msg, 0x0, sizeof(*msg));
1055-
msg->nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
1056-
msg->ndmsg.ndm_ifindex = ifindex;
1057-
msg->ndmsg.ndm_family = AF_MCTP;
1058-
1059-
msg->nh.nlmsg_len = NLMSG_LENGTH(sizeof(msg->ndmsg));
1060-
rta_len = sizeof(msg->rta_buff);
1061-
rta = (void*)msg->rta_buff;
1062-
1063-
msg->nh.nlmsg_len += mctp_put_rtnlmsg_attr(&rta, &rta_len,
1064-
NDA_DST, &eid, sizeof(eid));
1065-
1066-
1067-
if (prta)
1068-
*prta = rta;
1069-
if (prta_len)
1070-
*prta_len = rta_len;
1071-
return 0;
1072-
}
1073-
10741026
static int cmd_neigh_add(struct ctx *ctx, int argc, const char **argv)
10751027
{
1076-
struct mctp_neighalter_msg msg;
1077-
struct rtattr *rta;
10781028
const char *linkstr, *eidstr, *lladdrstr;
1079-
int rc;
10801029
uint8_t llbuf[MAX_ADDR_LEN];
1081-
size_t llbuf_len, rta_len;
1030+
size_t llbuf_len;
1031+
mctp_eid_t eid;
1032+
uint32_t tmp;
1033+
int rc;
10821034

10831035
rc = 0;
10841036
if (argc != 6) {
@@ -1107,22 +1059,20 @@ static int cmd_neigh_add(struct ctx *ctx, int argc, const char **argv)
11071059
return rc;
11081060
}
11091061

1110-
rc = fill_neighalter_args(ctx, &msg, &rta, &rta_len,
1111-
eidstr, linkstr);
1112-
if (rc) {
1062+
if (parse_uint32(eidstr, &tmp) < 0 || tmp > 0xff) {
1063+
warnx("invalid address %s", eidstr);
11131064
return -1;
11141065
}
1066+
eid = tmp & 0xff;
11151067

1116-
msg.nh.nlmsg_type = RTM_NEWNEIGH;
1117-
msg.nh.nlmsg_len += mctp_put_rtnlmsg_attr(&rta, &rta_len,
1118-
NDA_LLADDR, llbuf, llbuf_len);
1119-
return mctp_nl_send(ctx->nl, &msg.nh);
1068+
return mctp_nl_neigh_add(ctx->nl, eid, linkstr, llbuf, llbuf_len);
11201069
}
11211070

11221071
static int cmd_neigh_del(struct ctx *ctx, int argc, const char **argv)
11231072
{
1124-
struct mctp_neighalter_msg msg;
11251073
const char *linkstr, *eidstr;
1074+
mctp_eid_t eid;
1075+
uint32_t tmp;
11261076
int rc;
11271077

11281078
rc = 0;
@@ -1141,14 +1091,13 @@ static int cmd_neigh_del(struct ctx *ctx, int argc, const char **argv)
11411091
eidstr = argv[1];
11421092
linkstr = argv[3];
11431093

1144-
rc = fill_neighalter_args(ctx, &msg, NULL, NULL,
1145-
eidstr, linkstr);
1146-
if (rc) {
1094+
if (parse_uint32(eidstr, &tmp) < 0 || tmp > 0xff) {
1095+
warnx("invalid address %s", eidstr);
11471096
return -1;
11481097
}
1098+
eid = tmp & 0xff;
11491099

1150-
msg.nh.nlmsg_type = RTM_DELNEIGH;
1151-
return mctp_nl_send(ctx->nl, &msg.nh);
1100+
return mctp_nl_neigh_del(ctx->nl, eid, linkstr);
11521101
}
11531102

11541103
static int cmd_neigh(struct ctx *ctx, int argc, const char **argv) {

0 commit comments

Comments
 (0)