You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/11/30 16:58:03 UTC
[15/16] incubator-mynewt-core git commit: oic;
change to use os_mbufs from oc_buffer_tx to transport.
oic; change to use os_mbufs from oc_buffer_tx to transport.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/84997a94
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/84997a94
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/84997a94
Branch: refs/heads/develop
Commit: 84997a94853faf183c427f33ff724b0250fa1e33
Parents: 6cdcc7e
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Mon Nov 28 10:40:15 2016 -0800
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Wed Nov 30 08:54:52 2016 -0800
----------------------------------------------------------------------
net/oic/src/api/oc_buffer.c | 43 ++++++++++----
net/oic/src/port/mynewt/adaptor.c | 59 ++++++++++--------
net/oic/src/port/mynewt/adaptor.h | 9 ++-
net/oic/src/port/mynewt/ble_adaptor.c | 30 ++--------
net/oic/src/port/mynewt/ip_adaptor.c | 86 ++++++++++++++++-----------
net/oic/src/port/mynewt/serial_adaptor.c | 36 ++---------
net/oic/src/port/oc_connectivity.h | 6 +-
7 files changed, 136 insertions(+), 133 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/84997a94/net/oic/src/api/oc_buffer.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_buffer.c b/net/oic/src/api/oc_buffer.c
index b92ac8f..6a38301 100644
--- a/net/oic/src/api/oc_buffer.c
+++ b/net/oic/src/api/oc_buffer.c
@@ -113,35 +113,58 @@ oc_send_message(oc_message_t *message)
}
static void
-oc_buffer_tx(struct oc_message *message)
+oc_buffer_tx(struct oc_message *msg)
{
+ struct os_mbuf *m;
+ struct oc_endpoint *oe;
+ int rc;
+
+ /* get a packet header */
+ m = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint));
+ if (!m) {
+ ERROR("oc_buffer_tx: failed to alloc mbuf\n");
+ oc_message_unref(msg);
+ return;
+ }
+
+ /* add this data to the mbuf */
+ rc = os_mbuf_append(m, msg->data, msg->length);
+ if (rc != 0) {
+ ERROR("oc_buffer_tx: could not append data\n");
+ oc_message_unref(msg);
+ return;
+ }
+
+ oe = OC_MBUF_ENDPOINT(m);
+ memcpy(oe, &msg->endpoint, sizeof(msg->endpoint));
+
+ oc_message_unref(msg);
+
#ifdef OC_CLIENT
- if (message->endpoint.flags & MULTICAST) {
+ if (oe->flags & MULTICAST) {
LOG("Outbound network event: multicast request\n");
- oc_send_multicast_message(message);
- oc_message_unref(message);
+ oc_send_multicast_message(m);
} else {
#endif
#ifdef OC_SECURITY
/* XXX convert this */
- if (message->endpoint.flags & SECURED) {
+ if (oe->flags & SECURED) {
LOG("Outbound network event: forwarding to DTLS\n");
- if (!oc_sec_dtls_connected(&message->endpoint)) {
+ if (!oc_sec_dtls_connected(oe)) {
LOG("Posting INIT_DTLS_CONN_EVENT\n");
oc_process_post(&oc_dtls_handler,
- oc_events[INIT_DTLS_CONN_EVENT], msg);
+ oc_events[INIT_DTLS_CONN_EVENT], m);
} else {
LOG("Posting RI_TO_DTLS_EVENT\n");
oc_process_post(&oc_dtls_handler,
- oc_events[RI_TO_DTLS_EVENT], msg);
+ oc_events[RI_TO_DTLS_EVENT], m);
}
} else
#endif
{
LOG("Outbound network event: unicast message\n");
- oc_send_buffer(message);
- oc_message_unref(message);
+ oc_send_buffer(m);
}
#ifdef OC_CLIENT
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/84997a94/net/oic/src/port/mynewt/adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/adaptor.c b/net/oic/src/port/mynewt/adaptor.c
index 40785c2..cdd31f5 100644
--- a/net/oic/src/port/mynewt/adaptor.c
+++ b/net/oic/src/port/mynewt/adaptor.c
@@ -68,54 +68,65 @@ oc_network_event_handler_mutex_unlock(void)
}
void
-oc_send_buffer(oc_message_t *message)
+oc_send_buffer(struct os_mbuf *m)
{
- switch (message->endpoint.flags) {
+ struct oc_endpoint *oe;
+
+ oe = OC_MBUF_ENDPOINT(m);
+
+ switch (oe->flags) {
#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1)
case IP:
- oc_send_buffer_ip(message);
+ oc_send_buffer_ip(m);
break;
#endif
#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1)
case GATT:
- oc_send_buffer_gatt(message);
+ oc_send_buffer_gatt(m);
break;
#endif
#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1)
case SERIAL:
- oc_send_buffer_serial(message);
+ oc_send_buffer_serial(m);
break;
#endif
default:
- ERROR("Unknown transport option %u\n", message->endpoint.flags);
- oc_message_unref(message);
+ ERROR("Unknown transport option %u\n", oe->flags);
+ os_mbuf_free_chain(m);
}
}
-void oc_send_multicast_message(oc_message_t *message)
+void
+oc_send_multicast_message(struct os_mbuf *m)
{
- oc_message_add_ref(message);
-
- /* send on all the transports. Don't forget to reference the message
- * so it doesn't get deleted */
-
+ /*
+ * Send on all the transports.
+ */
+ void (*funcs[])(struct os_mbuf *) = {
#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1)
- oc_send_buffer_ip_mcast(message);
+ oc_send_buffer_ip_mcast,
#endif
-
#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1)
- /* no multicast for GATT, just send unicast */
- oc_message_add_ref(message);
- oc_send_buffer_gatt(message);
+ /* no multicast for GATT, just send unicast */
+ oc_send_buffer_gatt,
#endif
-
#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1)
- /* no multi-cast for serial. just send unicast */
- oc_message_add_ref(message);
- oc_send_buffer_serial(message);
+ /* no multi-cast for serial. just send unicast */
+ oc_send_buffer_serial,
#endif
-
- oc_message_unref(message);
+ };
+ struct os_mbuf *n;
+ int i;
+
+ for (i = 0; i < (sizeof(funcs) / sizeof(funcs[0])) - 1; i++) {
+ n = os_mbuf_dup(m);
+ funcs[i](m);
+ if (!n) {
+ return;
+ }
+ m = n;
+ }
+ funcs[(sizeof(funcs) / sizeof(funcs[0])) - 1](m);
}
void
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/84997a94/net/oic/src/port/mynewt/adaptor.h
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/adaptor.h b/net/oic/src/port/mynewt/adaptor.h
index c6ea8bb..025efd6 100644
--- a/net/oic/src/port/mynewt/adaptor.h
+++ b/net/oic/src/port/mynewt/adaptor.h
@@ -32,21 +32,20 @@ struct oc_message;
#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1)
int oc_connectivity_init_ip(void);
void oc_connectivity_shutdown_ip(void);
-void oc_send_buffer_ip(struct oc_message *message);
-void oc_send_buffer_ip_mcast(struct oc_message *message);
+void oc_send_buffer_ip(struct os_mbuf *);
+void oc_send_buffer_ip_mcast(struct os_mbuf *);
#endif
#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1)
int oc_connectivity_init_gatt(void);
void oc_connectivity_shutdown_gatt(void);
-void oc_send_buffer_gatt(struct oc_message *message);
-void oc_send_buffer_gatt_mcast(struct oc_message *message);
+void oc_send_buffer_gatt(struct os_mbuf *);
#endif
#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1)
int oc_connectivity_init_serial(void);
void oc_connectivity_shutdown_serial(void);
-void oc_send_buffer_serial(struct oc_message *message);
+void oc_send_buffer_serial(struct os_mbuf *);
#endif
#ifdef __cplusplus
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/84997a94/net/oic/src/port/mynewt/ble_adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/ble_adaptor.c b/net/oic/src/port/mynewt/ble_adaptor.c
index 0c3363f..81f2d2c 100644
--- a/net/oic/src/port/mynewt/ble_adaptor.c
+++ b/net/oic/src/port/mynewt/ble_adaptor.c
@@ -208,41 +208,19 @@ oc_connectivity_shutdown_gatt(void)
}
void
-oc_send_buffer_gatt(oc_message_t *message)
+oc_send_buffer_gatt(struct os_mbuf *m)
{
- struct os_mbuf *m = NULL;
- int rc;
-
- /* get a packet header */
- m = os_msys_get_pkthdr(0, 0);
- if (m == NULL) {
- ERROR("oc_transport_gatt: No mbuf available\n");
- goto err;
- }
+ struct oc_endpoint *oe;
- /* add this data to the mbuf */
- rc = os_mbuf_append(m, message->data, message->length);
- if (rc != 0) {
- ERROR("oc_transport_gatt: could not append data \n");
- goto err;
- }
+ oe = OC_MBUF_ENDPOINT(m);
#if (MYNEWT_VAL(OC_CLIENT) == 1)
ERROR("send not supported on client");
#endif
#if (MYNEWT_VAL(OC_SERVER) == 1)
- ble_gattc_notify_custom(message->endpoint.bt_addr.conn_handle,
- g_ble_coap_attr_handle, m);
- m = NULL;
+ ble_gattc_notify_custom(oe->bt_addr.conn_handle, g_ble_coap_attr_handle, m);
#endif
-
-err:
- if (m) {
- os_mbuf_free_chain(m);
- }
- oc_message_unref(message);
- return;
}
void
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/84997a94/net/oic/src/port/mynewt/ip_adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/ip_adaptor.c b/net/oic/src/port/mynewt/ip_adaptor.c
index 181bc68..90edd42 100644
--- a/net/oic/src/port/mynewt/ip_adaptor.c
+++ b/net/oic/src/port/mynewt/ip_adaptor.c
@@ -35,7 +35,7 @@
static void oc_event_ip(struct os_event *ev);
-struct os_event oc_sock_read_event = {
+static struct os_event oc_sock_read_event = {
.ev_cb = oc_event_ip,
};
@@ -46,45 +46,43 @@ struct os_event oc_sock_read_event = {
#define COAP_PORT_UNSECURED (5683)
/* TODO use inet_pton when its available */
-const struct mn_in6_addr coap_all_nodes_v6 = {
+static const struct mn_in6_addr coap_all_nodes_v6 = {
.s_addr = {0xFF,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFD}
};
/* sockets to use for coap unicast and multicast */
-struct mn_socket *ucast;
+static struct mn_socket *ucast;
#if (MYNEWT_VAL(OC_SERVER) == 1)
-struct mn_socket *mcast;
+static struct mn_socket *mcast;
#endif
static void
-oc_send_buffer_ip_int(oc_message_t *message, int mcast)
+oc_send_buffer_ip_int(struct os_mbuf *m, int is_mcast)
{
struct mn_sockaddr_in6 to;
- struct os_mbuf m;
+ struct oc_endpoint *oe;
+ struct mn_itf itf;
+ struct mn_itf itf2;
+ struct os_mbuf *n;
int rc;
- LOG("oc_transport_ip attempt send buffer %lu\n",
- (unsigned long)message->length);
+ LOG("oc_transport_ip attempt send buffer %u\n",
+ OS_MBUF_PKTHDR(m)->omp_len);
+
+ oe = OC_MBUF_ENDPOINT(m);
to.msin6_len = sizeof(to);
to.msin6_family = MN_AF_INET6;
+ to.msin6_port = htons(oe->ipv6_addr.port);
+ to.msin6_scope_id = oe->ipv6_addr.scope;
+ memcpy(&to.msin6_addr, oe->ipv6_addr.address, sizeof(to.msin6_addr));
- to.msin6_port = htons(message->endpoint.ipv6_addr.port);
- memcpy(&to.msin6_addr, message->endpoint.ipv6_addr.address,
- sizeof(to.msin6_addr));
-
- /* put on an mbuf header to make the socket happy */
- memset(&m, 0, sizeof(m));
- m.om_data = message->data;
- m.om_len = message->length;
- to.msin6_scope_id = message->endpoint.ipv6_addr.scope;
-
- if (mcast) {
- struct mn_itf itf;
+ if (is_mcast) {
memset(&itf, 0, sizeof(itf));
+ memset(&itf2, 0, sizeof(itf2));
while (1) {
rc = mn_itf_getnext(&itf);
@@ -96,37 +94,57 @@ oc_send_buffer_ip_int(oc_message_t *message, int mcast)
continue;
}
- to.msin6_scope_id = itf.mif_idx;
-
- rc = mn_sendto(ucast, &m, (struct mn_sockaddr *) &to);
+ if (!itf2.mif_idx) {
+ memcpy(&itf2, &itf, sizeof(itf));
+ continue;
+ }
+ n = os_mbuf_dup(m);
+ if (!n) {
+ break;
+ }
+ to.msin6_scope_id = itf2.mif_idx;
+ rc = mn_sendto(ucast, n, (struct mn_sockaddr *) &to);
if (rc != 0) {
- ERROR("Failed sending buffer %lu on itf %d\n",
- (unsigned long)message->length, to.msin6_scope_id);
+ ERROR("Failed sending buffer %u on itf %d\n",
+ OS_MBUF_PKTHDR(m)->omp_len, to.msin6_scope_id);
+ os_mbuf_free_chain(n);
+ }
+ }
+ if (itf2.mif_idx) {
+ to.msin6_scope_id = itf2.mif_idx;
+ rc = mn_sendto(ucast, m, (struct mn_sockaddr *) &to);
+ if (rc != 0) {
+ ERROR("Failed sending buffer %u on itf %d\n",
+ OS_MBUF_PKTHDR(m)->omp_len, to.msin6_scope_id);
+ os_mbuf_free_chain(m);
}
}
} else {
- rc = mn_sendto(ucast, &m, (struct mn_sockaddr *) &to);
+ rc = mn_sendto(ucast, m, (struct mn_sockaddr *) &to);
if (rc != 0) {
- ERROR("Failed sending buffer %lu on itf %d\n",
- (unsigned long)message->length, to.msin6_scope_id);
+ ERROR("Failed sending buffer %u on itf %d\n",
+ OS_MBUF_PKTHDR(m)->omp_len, to.msin6_scope_id);
+ os_mbuf_free_chain(m);
}
}
- oc_message_unref(message);
+ if (rc) {
+ os_mbuf_free_chain(m);
+ }
}
void
-oc_send_buffer_ip(oc_message_t *message)
+oc_send_buffer_ip(struct os_mbuf *m)
{
- oc_send_buffer_ip_int(message, 0);
+ oc_send_buffer_ip_int(m, 0);
}
void
-oc_send_buffer_ip_mcast(oc_message_t *message)
+oc_send_buffer_ip_mcast(struct os_mbuf *m)
{
- oc_send_buffer_ip_int(message, 1);
+ oc_send_buffer_ip_int(m, 1);
}
static struct os_mbuf *
-oc_attempt_rx_ip_sock(struct mn_socket * rxsock)
+oc_attempt_rx_ip_sock(struct mn_socket *rxsock)
{
int rc;
struct os_mbuf *m;
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/84997a94/net/oic/src/port/mynewt/serial_adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/serial_adaptor.c b/net/oic/src/port/mynewt/serial_adaptor.c
index 209a9c7..59342a9 100644
--- a/net/oic/src/port/mynewt/serial_adaptor.c
+++ b/net/oic/src/port/mynewt/serial_adaptor.c
@@ -58,7 +58,8 @@ oc_event_serial(struct os_event *ev)
}
int
-oc_connectivity_init_serial(void) {
+oc_connectivity_init_serial(void)
+{
int rc;
rc = shell_nlip_input_register(oc_serial_in, NULL);
@@ -80,39 +81,14 @@ err:
void
-oc_send_buffer_serial(oc_message_t *message)
+oc_send_buffer_serial(struct os_mbuf *m)
{
- int rc;
- struct os_mbuf *m;
-
- /* get a packet header */
- m = os_msys_get_pkthdr(0, 0);
- if (m == NULL) {
- ERROR("oc_transport_serial: No mbuf available\n");
- goto err;
- }
-
- /* add this data to the mbuf */
- rc = os_mbuf_append(m, message->data, message->length);
- if (rc != 0) {
-
- ERROR("oc_transport_serial: could not append data \n");
- goto err;
- }
+ LOG("oc_transport_serial: send buffer %u\n", OS_MBUF_PKTHDR(m)->omp_len);
/* send over the shell output */
- rc = shell_nlip_output(m);
- if (rc != 0) {
- ERROR("oc_transport_serial: nlip output failed \n");
- goto err;
+ if (shell_nlip_output(m)) {
+ ERROR("oc_transport_serial: nlip output failed\n");
}
-
- LOG("oc_transport_serial: send buffer %zu\n", message->length);
-
-err:
- oc_message_unref(message);
- return;
-
}
static struct os_mbuf *
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/84997a94/net/oic/src/port/oc_connectivity.h
----------------------------------------------------------------------
diff --git a/net/oic/src/port/oc_connectivity.h b/net/oic/src/port/oc_connectivity.h
index 493b30e..123db7c 100644
--- a/net/oic/src/port/oc_connectivity.h
+++ b/net/oic/src/port/oc_connectivity.h
@@ -66,17 +66,15 @@ typedef struct oc_message {
uint8_t data[MAX_PAYLOAD_SIZE];
} oc_message_t;
-void oc_send_buffer(oc_message_t *message);
-
#ifdef OC_SECURITY
uint16_t oc_connectivity_get_dtls_port(void);
#endif /* OC_SECURITY */
int oc_connectivity_init(void);
-
void oc_connectivity_shutdown(void);
-void oc_send_multicast_message(oc_message_t *message);
+void oc_send_buffer(struct os_mbuf *);
+void oc_send_multicast_message(struct os_mbuf *);
#ifdef __cplusplus
}