@@ -252,9 +252,10 @@ static void ppp_start_failure(void)
252
252
net_if_down (ppp_iface );
253
253
}
254
254
255
- static unsigned int ppp_retrieve_mtu ( void )
255
+ static void ppp_retrieve_pdn_info ( struct ppp_context * const ctx )
256
256
{
257
- struct pdn_dynamic_info populated_info = { 0 };
257
+ struct pdn_dynamic_info populated_info = {0 };
258
+ unsigned int mtu = CONFIG_SLM_PPP_FALLBACK_MTU ;
258
259
259
260
if (!pdn_dynamic_info_get (ppp_pdn_cid , & populated_info )) {
260
261
if (populated_info .ipv6_mtu ) {
@@ -263,23 +264,44 @@ static unsigned int ppp_retrieve_mtu(void)
263
264
* Because, it must be at least 1280 for IPv6,
264
265
* while MTU of IPv4 may be less.
265
266
*/
266
- return MIN (populated_info .ipv6_mtu , sizeof (ppp_data_buf ));
267
- }
268
- if (populated_info .ipv4_mtu ) {
267
+ mtu = MIN (populated_info .ipv6_mtu , sizeof (ppp_data_buf ));
268
+ } else if (populated_info .ipv4_mtu ) {
269
269
/* Set the PPP MTU to that of the LTE link. */
270
- return MIN (populated_info .ipv4_mtu , sizeof (ppp_data_buf ));
270
+ mtu = MIN (populated_info .ipv4_mtu , sizeof (ppp_data_buf ));
271
271
}
272
- }
273
-
274
- LOG_DBG ("Could not retrieve MTU, using fallback value." );
275
- BUILD_ASSERT (sizeof (ppp_data_buf ) >= CONFIG_SLM_PPP_FALLBACK_MTU );
276
- return CONFIG_SLM_PPP_FALLBACK_MTU ;
277
- }
278
-
279
- static void ppp_set_mtu (void )
280
- {
281
- const unsigned int mtu = ppp_retrieve_mtu ();
282
272
273
+ /* Try to populate DNS addresses from PDN */
274
+ if (populated_info .dns_addr4_primary .s_addr != INADDR_ANY ) {
275
+ /* Populate both My address and peer options
276
+ * as these are wrong way in Zephyr (it offers my_option DNS)
277
+ */
278
+ ctx -> ipcp .peer_options .dns1_address = populated_info .dns_addr4_primary ;
279
+ ctx -> ipcp .peer_options .dns2_address = populated_info .dns_addr4_secondary ;
280
+ ctx -> ipcp .my_options .dns1_address = populated_info .dns_addr4_primary ;
281
+ ctx -> ipcp .my_options .dns2_address = populated_info .dns_addr4_secondary ;
282
+ #if defined(CONFIG_LTE_LC_DNS_FALLBACK_ADDRESS )
283
+ } else {
284
+ /* Use fallback DNS addresses from LTE_LC module */
285
+ (void )nrf_inet_pton (NRF_AF_INET , CONFIG_LTE_LC_DNS_FALLBACK_ADDRESS ,
286
+ & ctx -> ipcp .peer_options .dns1_address );
287
+ ctx -> ipcp .my_options .dns1_address = ctx -> ipcp .peer_options .dns1_address ;
288
+ }
289
+ #elif defined(CONFIG_DNS_SERVER1)
290
+ } else {
291
+ /* Use fallback DNS addresses from Zephyr */
292
+ (void )nrf_inet_pton (NRF_AF_INET , CONFIG_DNS_SERVER1 ,
293
+ & ctx -> ipcp .peer_options .dns1_address );
294
+ ctx -> ipcp .my_options .dns1_address = ctx -> ipcp .peer_options .dns1_address ;
295
+ }
296
+ #else
297
+ } else {
298
+ LOG_WRN ("No DNS addresses available on PDN and no fallback configured." );
299
+ }
300
+ #endif
301
+ } else {
302
+ LOG_DBG ("Could not retrieve MTU, using fallback value." );
303
+ BUILD_ASSERT (sizeof (ppp_data_buf ) >= CONFIG_SLM_PPP_FALLBACK_MTU );
304
+ }
283
305
net_if_set_mtu (ppp_iface , mtu );
284
306
LOG_DBG ("MTU set to %u." , mtu );
285
307
}
@@ -300,7 +322,7 @@ static int ppp_start(void)
300
322
goto error ;
301
323
}
302
324
303
- ppp_set_mtu ( );
325
+ ppp_retrieve_pdn_info ( ctx );
304
326
305
327
ret = net_if_up (ppp_iface );
306
328
if (ret ) {
0 commit comments