Skip to content

Commit d44ed02

Browse files
author
Michael Scott
committed
net: lwm2m: remove extra sockaddr values
All throughout the LwM2M library we use sockaddr values which are basically the same as the net_app_ctx's remote addr. There's no reason to keep these extra sockaddr values around. The net_app framework client won't accept incoming requests on sockaddr other than the one we're connected to. Signed-off-by: Michael Scott <[email protected]>
1 parent 0fd0f53 commit d44ed02

File tree

4 files changed

+73
-127
lines changed

4 files changed

+73
-127
lines changed

subsys/net/lib/lwm2m/lwm2m_engine.c

+20-28
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@
8282
struct observe_node {
8383
sys_snode_t node;
8484
struct net_app_ctx *net_app_ctx;
85-
struct sockaddr addr;
8685
struct lwm2m_obj_path path;
8786
u8_t token[8];
8887
s64_t event_timestamp;
@@ -180,19 +179,17 @@ int lwm2m_notify_observer_path(struct lwm2m_obj_path *path)
180179
}
181180

182181
static int engine_add_observer(struct net_app_ctx *app_ctx,
183-
struct sockaddr *addr,
184182
const u8_t *token, u8_t tkl,
185183
struct lwm2m_obj_path *path,
186184
u16_t format)
187185
{
188186
struct lwm2m_engine_obj_inst *obj_inst = NULL;
189187
struct observe_node *obs;
188+
struct sockaddr *addr;
190189
int i;
191190

192-
if (!addr) {
193-
SYS_LOG_ERR("sockaddr is required");
194-
return -EINVAL;
195-
}
191+
/* remote addr */
192+
addr = &app_ctx->default_ctx->remote;
196193

197194
/* check if object exists */
198195
if (!get_engine_obj(path->obj_id)) {
@@ -229,7 +226,7 @@ static int engine_add_observer(struct net_app_ctx *app_ctx,
229226

230227
/* make sure this observer doesn't exist already */
231228
SYS_SLIST_FOR_EACH_CONTAINER(&engine_observer_list, obs, node) {
232-
if (memcmp(&obs->addr, addr, sizeof(addr)) == 0 &&
229+
if (obs->net_app_ctx == app_ctx &&
233230
memcmp(&obs->path, path, sizeof(*path)) == 0) {
234231
/* quietly update the token information */
235232
memcpy(obs->token, token, tkl);
@@ -259,7 +256,6 @@ static int engine_add_observer(struct net_app_ctx *app_ctx,
259256
/* copy the values and add it to the list */
260257
observe_node_data[i].used = true;
261258
observe_node_data[i].net_app_ctx = app_ctx;
262-
memcpy(&observe_node_data[i].addr, addr, sizeof(*addr));
263259
memcpy(&observe_node_data[i].path, path, sizeof(*path));
264260
memcpy(observe_node_data[i].token, token, tkl);
265261
observe_node_data[i].tkl = tkl;
@@ -624,8 +620,7 @@ int lwm2m_init_message(struct net_app_ctx *app_ctx, struct zoap_packet *zpkt,
624620
}
625621

626622
struct zoap_pending *lwm2m_init_message_pending(struct lwm2m_ctx *client_ctx,
627-
struct zoap_packet *zpkt,
628-
struct sockaddr *addr)
623+
struct zoap_packet *zpkt)
629624
{
630625
struct zoap_pending *pending = NULL;
631626
int ret;
@@ -638,7 +633,8 @@ struct zoap_pending *lwm2m_init_message_pending(struct lwm2m_ctx *client_ctx,
638633
return NULL;
639634
}
640635

641-
ret = zoap_pending_init(pending, zpkt, addr);
636+
ret = zoap_pending_init(pending, zpkt,
637+
&client_ctx->net_app_ctx.default_ctx->remote);
642638
if (ret < 0) {
643639
SYS_LOG_ERR("Unable to initialize a pending "
644640
"retransmission (err:%d).", ret);
@@ -1999,8 +1995,7 @@ static int get_observe_option(const struct zoap_packet *zpkt)
19991995

20001996
static int handle_request(struct net_app_ctx *app_ctx,
20011997
struct zoap_packet *request,
2002-
struct zoap_packet *response,
2003-
struct sockaddr *from_addr)
1998+
struct zoap_packet *response)
20041999
{
20052000
int r;
20062001
u8_t code;
@@ -2142,7 +2137,7 @@ static int handle_request(struct net_app_ctx *app_ctx,
21422137
r);
21432138
}
21442139

2145-
r = engine_add_observer(app_ctx, from_addr,
2140+
r = engine_add_observer(app_ctx,
21462141
token, tkl, &path,
21472142
accept);
21482143
if (r < 0) {
@@ -2231,19 +2226,17 @@ static int handle_request(struct net_app_ctx *app_ctx,
22312226
return r;
22322227
}
22332228

2234-
int lwm2m_udp_sendto(struct net_app_ctx *app_ctx, struct net_pkt *pkt,
2235-
const struct sockaddr *dst_addr)
2229+
int lwm2m_udp_sendto(struct net_app_ctx *app_ctx, struct net_pkt *pkt)
22362230
{
2237-
return net_app_send_pkt(app_ctx, pkt, dst_addr, NET_SOCKADDR_MAX_SIZE,
2238-
K_NO_WAIT, NULL);
2231+
return net_app_send_pkt(app_ctx, pkt, &app_ctx->default_ctx->remote,
2232+
NET_SOCKADDR_MAX_SIZE, K_NO_WAIT, NULL);
22392233
}
22402234

22412235
void lwm2m_udp_receive(struct lwm2m_ctx *client_ctx, struct net_pkt *pkt,
22422236
bool handle_separate_response,
22432237
int (*udp_request_handler)(struct net_app_ctx *app_ctx,
22442238
struct zoap_packet *,
2245-
struct zoap_packet *,
2246-
struct sockaddr *))
2239+
struct zoap_packet *))
22472240
{
22482241
struct net_udp_hdr hdr, *udp_hdr;
22492242
struct zoap_pending *pending;
@@ -2332,13 +2325,12 @@ void lwm2m_udp_receive(struct lwm2m_ctx *client_ctx, struct net_pkt *pkt,
23322325
* The "response" here is actually a new request
23332326
*/
23342327
r = udp_request_handler(&client_ctx->net_app_ctx,
2335-
&response, &response2,
2336-
&from_addr);
2328+
&response, &response2);
23372329
if (r < 0) {
23382330
SYS_LOG_ERR("Request handler error: %d", r);
23392331
} else {
23402332
r = lwm2m_udp_sendto(&client_ctx->net_app_ctx,
2341-
pkt2, &from_addr);
2333+
pkt2);
23422334
if (r < 0) {
23432335
SYS_LOG_ERR("Err sending response: %d",
23442336
r);
@@ -2397,7 +2389,7 @@ static void retransmit_request(struct k_work *work)
23972389
}
23982390

23992391
r = lwm2m_udp_sendto(&client_ctx->net_app_ctx,
2400-
pending->pkt, &pending->addr);
2392+
pending->pkt);
24012393
if (r < 0) {
24022394
return;
24032395
}
@@ -2479,7 +2471,8 @@ static int generate_notify_message(struct observe_node *obs,
24792471
obs->path.res_id,
24802472
obs->path.level,
24812473
sprint_token(obs->token, obs->tkl),
2482-
lwm2m_sprint_ip_addr(&obs->addr),
2474+
lwm2m_sprint_ip_addr(
2475+
&obs->net_app_ctx->default_ctx->remote),
24832476
k_uptime_get());
24842477

24852478
obj_inst = get_engine_obj_inst(obs->path.obj_id,
@@ -2530,8 +2523,7 @@ static int generate_notify_message(struct observe_node *obs,
25302523
goto cleanup;
25312524
}
25322525

2533-
pending = lwm2m_init_message_pending(client_ctx, out.out_zpkt,
2534-
&obs->addr);
2526+
pending = lwm2m_init_message_pending(client_ctx, out.out_zpkt);
25352527
if (!pending) {
25362528
ret = -ENOMEM;
25372529
goto cleanup;
@@ -2548,7 +2540,7 @@ static int generate_notify_message(struct observe_node *obs,
25482540
zoap_reply_init(reply, &request);
25492541
reply->reply = notify_message_reply_cb;
25502542

2551-
ret = lwm2m_udp_sendto(obs->net_app_ctx, pkt, &obs->addr);
2543+
ret = lwm2m_udp_sendto(obs->net_app_ctx, pkt);
25522544
if (ret < 0) {
25532545
SYS_LOG_ERR("Error sending LWM2M packet (err:%d).", ret);
25542546
goto cleanup;

subsys/net/lib/lwm2m/lwm2m_engine.h

+3-6
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ int lwm2m_init_message(struct net_app_ctx *app_ctx, struct zoap_packet *zpkt,
5252
struct net_pkt **pkt, u8_t type, u8_t code, u16_t mid,
5353
const u8_t *token, u8_t tkl);
5454
struct zoap_pending *lwm2m_init_message_pending(struct lwm2m_ctx *client_ctx,
55-
struct zoap_packet *zpkt,
56-
struct sockaddr *addr);
55+
struct zoap_packet *zpkt);
5756
void lwm2m_init_message_cleanup(struct net_pkt *pkt,
5857
struct zoap_pending *pending,
5958
struct zoap_reply *reply);
@@ -65,13 +64,11 @@ int lwm2m_write_handler(struct lwm2m_engine_obj_inst *obj_inst,
6564
struct lwm2m_engine_obj_field *obj_field,
6665
struct lwm2m_engine_context *context);
6766

68-
int lwm2m_udp_sendto(struct net_app_ctx *app_ctx, struct net_pkt *pkt,
69-
const struct sockaddr *dst_addr);
67+
int lwm2m_udp_sendto(struct net_app_ctx *app_ctx, struct net_pkt *pkt);
7068
void lwm2m_udp_receive(struct lwm2m_ctx *client_ctx, struct net_pkt *pkt,
7169
bool handle_separate_response,
7270
int (*udp_request_handler)(struct net_app_ctx *app_ctx,
7371
struct zoap_packet *request,
74-
struct zoap_packet *response,
75-
struct sockaddr *from_addr));
72+
struct zoap_packet *response));
7673

7774
#endif /* LWM2M_ENGINE_H */

subsys/net/lib/lwm2m/lwm2m_obj_firmware_pull.c

+3-6
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ static void retransmit_request(struct k_work *work)
5757
return;
5858
}
5959

60-
r = lwm2m_udp_sendto(&firmware_ctx.net_app_ctx,
61-
pending->pkt, &pending->addr);
60+
r = lwm2m_udp_sendto(&firmware_ctx.net_app_ctx, pending->pkt);
6261
if (r < 0) {
6362
return;
6463
}
@@ -104,8 +103,7 @@ static int transfer_request(struct zoap_block_context *ctx,
104103
goto cleanup;
105104
}
106105

107-
pending = lwm2m_init_message_pending(&firmware_ctx, &request,
108-
&firmware_addr);
106+
pending = lwm2m_init_message_pending(&firmware_ctx, &request);
109107
if (!pending) {
110108
ret = -ENOMEM;
111109
goto cleanup;
@@ -126,8 +124,7 @@ static int transfer_request(struct zoap_block_context *ctx,
126124
}
127125

128126
/* send request */
129-
ret = lwm2m_udp_sendto(&firmware_ctx.net_app_ctx,
130-
pkt, &firmware_addr);
127+
ret = lwm2m_udp_sendto(&firmware_ctx.net_app_ctx, pkt);
131128
if (ret < 0) {
132129
SYS_LOG_ERR("Error sending LWM2M packet (err:%d).",
133130
ret);

0 commit comments

Comments
 (0)