Beispiel #1
0
static int dev_configuration(struct net_device *dev)
{
        struct net_addr dst;
        struct service_id default_service;
        int ret;

        memset(&default_service, 0, sizeof(default_service));

        if (ifname && strcmp(dev->name, ifname) != 0)
                return 0;

        if (dev->flags & IFF_POINTOPOINT)
                ret = dev_get_ipv4_addr(dev, IFADDR_ADDRESS, &dst);
        else
                ret = dev_get_ipv4_addr(dev, IFADDR_BROADCAST, &dst);

        if (ret == 1) {
#if defined(ENABLE_DEBUG)
                {
                        char buf[16];
                        LOG_DBG("dev %s bc=%s\n", 
                                dev->name, 
                                inet_ntop(AF_INET, &dst, buf, 16));
                }
#endif
                service_add(&default_service, 0, SERVICE_RULE_FORWARD, 0, 
                            BROADCAST_SERVICE_DEFAULT_PRIORITY,
                            BROADCAST_SERVICE_DEFAULT_WEIGHT, 
                            &dst, sizeof(dst), make_dev_target(dev), 
                            GFP_ATOMIC);
        } 
        return ret;
}
Beispiel #2
0
int serval_ipv4_build_and_send_pkt(struct sk_buff *skb, struct sock *sk,
                                   u32 saddr, u32 daddr, 
                                   struct ip_options *opt)
{
        int err = 0;

#if defined(OS_LINUX_KERNEL)
	/* 
	We need to initialize the IP control block since SAL 
	might have dirtied it.
	*/
        memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
#endif

        if (saddr == 0) {
                if (!skb->dev) {
                        LOG_ERR("no device set\n");
                        FREE_SKB(skb);
                        return -ENODEV;
                }
                dev_get_ipv4_addr(skb->dev, IFADDR_LOCAL, &saddr);
        }

        err = serval_ipv4_fill_in_hdr(sk, skb, saddr, daddr);
        
        if (err < 0) {
                LOG_ERR("hdr failed\n");
                FREE_SKB(skb);
                return err;
        }

        /* Transmit */
        err = serval_ip_local_out(skb);

        if (err < 0) {
                LOG_ERR("xmit failed\n");
        }
        return err;
}