[OpenWrt-Devel] [PATCH] libubus: use network order in ubus message header fields

Eyal Birger eyal.birger at gmail.com
Sun Feb 14 15:23:56 EST 2016


Changing the ubus message header fields from 'host' order to 'network' order
allows passing ubus messages between hosts with different endianity.

Example use (creating a ubus proxy):

on host A (e.g. big endian router already running ubusd), run:
$ socat TCP-LISTEN:5699,fork UNIX:/var/run/ubus.sock &

On host B (e.g. little endian development PC) run:
$ socat UNIX-LISTEN:/var/run/ubus.sock,fork TCP:<host A IP>:5699 &

Now ubus applications can be run on host B and seamlessly interact with ubus
applications on host A.

Signed-off-by: Eyal Birger <eyal.birger at gmail.com>
---
 libubus-io.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libubus-io.c b/libubus-io.c
index b9b3128..9320bf3 100644
--- a/libubus-io.c
+++ b/libubus-io.c
@@ -133,8 +133,8 @@ int __hidden ubus_send_msg(struct ubus_context *ctx, uint32_t seq,
 
 	hdr.version = 0;
 	hdr.type = cmd;
-	hdr.seq = seq;
-	hdr.peer = peer;
+	hdr.seq = cpu_to_be16(seq);
+	hdr.peer = cpu_to_be32(peer);
 
 	if (!msg) {
 		blob_buf_init(&b, 0);
@@ -281,6 +281,9 @@ static bool get_next_msg(struct ubus_context *ctx, int *recv_fd)
 		return false;
 	}
 
+	hdrbuf.hdr.seq = be16_to_cpu(hdrbuf.hdr.seq);
+	hdrbuf.hdr.peer = be32_to_cpu(hdrbuf.hdr.peer);
+
 	if (!ubus_validate_hdr(&hdrbuf.hdr))
 		return false;
 
-- 
2.4.0
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list