efdbaaefdd
Fix alt1250 daemon to return -ENOTTY when receiving ioctl request and in the state of using kernel's network stack. Fix alt1250 daemon to return -ENOTSUP when receiving socket request and in the state of using kernel's network stack. Fix alt1250 daemon to set dummy subnet mask in network devices. This allows the correct network device to be selected when two network devices exist.
116 lines
4.0 KiB
C
116 lines
4.0 KiB
C
/****************************************************************************
|
|
* apps/lte/alt1250/alt1250_netdev.c
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership. The
|
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <nuttx/config.h>
|
|
|
|
#include <string.h>
|
|
#include <nuttx/net/net.h>
|
|
#include <nuttx/net/netdev.h>
|
|
|
|
#include "alt1250_netdev.h"
|
|
|
|
#define ALT1250_SUBNET_MASK 0xFFFFFF00 /* 255.255.255.0 this is dummy */
|
|
|
|
/****************************************************************************
|
|
* Public Functions
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* name: alt1250_netdev_register
|
|
****************************************************************************/
|
|
|
|
void alt1250_netdev_register(FAR struct alt1250_s *dev)
|
|
{
|
|
netdev_register(&dev->net_dev, NET_LL_ETHERNET);
|
|
}
|
|
|
|
/****************************************************************************
|
|
* name: alt1250_netdev_unregister
|
|
****************************************************************************/
|
|
|
|
void alt1250_netdev_unregister(FAR struct alt1250_s *dev)
|
|
{
|
|
netdev_unregister(&dev->net_dev);
|
|
}
|
|
|
|
/****************************************************************************
|
|
* name: alt1250_netdev_ifdown
|
|
****************************************************************************/
|
|
|
|
void alt1250_netdev_ifdown(FAR struct alt1250_s *dev)
|
|
{
|
|
dev->net_dev.d_flags = IFF_DOWN;
|
|
#ifdef CONFIG_NET_IPv4
|
|
memset(&dev->net_dev.d_ipaddr, 0, sizeof(dev->net_dev.d_ipaddr));
|
|
memset(&dev->net_dev.d_draddr, 0, sizeof(dev->net_dev.d_draddr));
|
|
memset(&dev->net_dev.d_netmask, 0, sizeof(dev->net_dev.d_netmask));
|
|
#endif
|
|
#ifdef CONFIG_NET_IPv6
|
|
memset(&dev->net_dev.d_ipv6addr, 0, sizeof(dev->net_dev.d_ipv6addr));
|
|
#endif
|
|
}
|
|
|
|
/****************************************************************************
|
|
* name: alt1250_netdev_ifup
|
|
****************************************************************************/
|
|
|
|
void alt1250_netdev_ifup(FAR struct alt1250_s *dev, FAR lte_pdn_t *pdn)
|
|
{
|
|
int i;
|
|
|
|
dev->net_dev.d_flags = IFF_UP;
|
|
|
|
for (i = 0; i < pdn->ipaddr_num; i++)
|
|
{
|
|
#ifdef CONFIG_NET_IPv4
|
|
if (LTE_IPTYPE_V4 == pdn->address[i].ip_type)
|
|
{
|
|
inet_pton(AF_INET,
|
|
(FAR const char *)pdn->address[i].address,
|
|
(FAR void *)&dev->net_dev.d_ipaddr);
|
|
inet_pton(AF_INET,
|
|
(FAR const char *)pdn->address[i].address,
|
|
(FAR void *)&dev->net_dev.d_draddr);
|
|
|
|
/* The following parameters are dummy values because
|
|
* they cannot be obtained from alt1250.
|
|
*/
|
|
|
|
dev->net_dev.d_draddr = htonl((ntohl(dev->net_dev.d_draddr) &
|
|
ALT1250_SUBNET_MASK) | 1);
|
|
dev->net_dev.d_netmask = htonl(ALT1250_SUBNET_MASK);
|
|
}
|
|
#endif
|
|
|
|
#ifdef CONFIG_NET_IPv6
|
|
if (LTE_IPTYPE_V6 == pdn->address[i].ip_type)
|
|
{
|
|
inet_pton(AF_INET6,
|
|
(FAR const char *)pdn->address[i].address,
|
|
(FAR void *)&dev->net_dev.d_ipv6addr);
|
|
}
|
|
#endif
|
|
}
|
|
}
|