Compiling virtual network adapter driver problem (net_device struct)


 
Thread Tools Search this Thread
Top Forums Programming Compiling virtual network adapter driver problem (net_device struct)
# 1  
Old 10-24-2010
Compiling virtual network adapter driver problem (net_device struct)

Hi,
I found on linuxgazette.net/93/bhaskaran.html page very useful sample of virtual driver (not connected to real hardware).
I try to compile it with no effect.
So:
I got fresh Ubuntu 9.10 (kernel 2.6.31-14)
My source is saved in networkAdapter.c file in /usr/src/myModules directory.
I created Makefile too with: obj-m = networkAdapter.o content in /usr/src/myModules directory.
I try to compile with:
Code:
make -C /usr/src/linux-headers-2.6.31-14-generic/ M=$(pwd) modules

Code:
cc -I /usr/src/linux-headers-2.6.31-14-generic/include/ -c networkAdapter.c

being in /usr/src/myModules directory.

Make -c ... output contains 3 errors:
Code:
'struct net_device' has no member named 'open'
'struct net_device' has no member named 'stop'
'struct net_device' has no member named 'hard_start_xmit'

cc -I ... output is very long and contains lots of errors.

Could you give me some hints how to compile it?

Regards.


Code:
#define MODULE             
    #define __KERNEL__     
    
    #include < linux/module.h >  
    #include < linux/config.h >  

     #include < linux/netdevice.h > 
    
    int rtl8139_open (struct net_device *dev)
    {
        printk("rtl8139_open called\n");
        netif_start_queue (dev);
        return 0;
    }

    int rtl8139_release (struct net_device *dev)
    {
        printk ("rtl8139_release called\n");
        netif_stop_queue(dev);
        return 0;
    }

    static int rtl8139_xmit (struct sk_buff *skb, 
                    struct net_device *dev)
    {
        printk ("dummy xmit function called....\n");
        dev_kfree_skb(skb);
        return 0;
    }

    int rtl8139_init (struct net_device *dev)
    {
        dev->open = rtl8139_open;
        dev->stop = rtl8139_release;
        dev->hard_start_xmit = rtl8139_xmit;
        printk ("8139 device initialized\n");
        return 0;
    }

    struct net_device rtl8139 = {init: rtl8139_init};

    int rtl8139_init_module (void)
    {
        int result;

        strcpy (rtl8139.name, "rtl8139");
        if ((result = register_netdev (&rtl8139))) {
            printk ("rtl8139: Error %d  initializing card rtl8139 card",result);
            return result;
        }
    return 0;
    }
    
     void rtl8139_cleanup (void)
    {
        printk ("<0> Cleaning Up the Module\n");
        unregister_netdev (&rtl8139);
        return;
    }
    
    module_init (rtl8139_init_module);
    module_exit (rtl8139_cleanup);

# 2  
Old 10-24-2010
This is very old code in terms of Linux. Kernel network structures have changed significantly since 2003.
# 3  
Old 10-24-2010
Yes, I have made a little research and found that net_device struct is a little bit different since 2009. I am trying to fit this code to new net_device struct that is no so easy.
Have you got any samples of network drivers basic source code?

I got now:

Code:
#include <linux/module.h>
#include <linux/config.h>
#include <linux/netdevice.h>


int virtualNIC_open(struct net_device *dev) {
 printk("virtualNIC_open called\n");
 netif_start_queue(dev);
 return 0;
}

int virtualNIC_release(struct net_device *dev) {
 printk("virtualNIC_release called\n");
 netif_stop_queue(dev);
 return 0;
}

static int virtualNIC_xmit(struct sk_buff *skb, struct net_device *dev) {
 printk("dummy xmit function called...\n");
 dev_kfree_skb(skb);
 return 0;
}

int virtualNIC_init(struct net_device *dev);


static const struct net_device_ops my_netdev_ops = {
 .ndo_init = virtualNIC_init,
 .ndo_open = virtualNIC_open,
 .ndo_stop = virtualNIC_release,
 .ndo_start_xmit = virtualNIC_xmit,
};

int virtualNIC_init(struct net_device *dev) {
 dev->netdev_ops = &my_netdev_ops;
 printk("virtualNIC device initialized\n");

struct net_device virtualNIC = {
 .netdev_ops = &my_netdev_ops
/* .netdev_ops.ndo_init: virtualNIC_init*/
};

int virtualNIC_init_module(void) {
 int result;
 strcpy(virtualNIC.name, "virtual network adapter");
 if((result = register_netdev(&virtualNIC))) {
  printk("virtualNIC: Error %d initalizing card ...", result);
  return result;
 }
 return 0;
}

I can compile it, but if I type 'insmod mymodule' then segmentation fault occurs. Don't know solution.

Last edited by Chrisdot; 10-24-2010 at 05:42 PM..
# 4  
Old 10-24-2010
How about using new code instead of fitting old code to new code?
# 5  
Old 10-25-2010
I have no idea how to make brand new code. What is more - I haven't found any tutorials containing writing network drivers based on new net_structure. All of them are old. That is the purpose to searching on unix.com forum for help.
# 6  
Old 10-25-2010
This looks like a decent tutorial: Writing Network Device Drivers for Linux
# 7  
Old 10-25-2010
God bless you. I am going to check this out this evening.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Attach Solaris 11.1 rwn driver to RaLink RT8200/8260 Wi Fi Adapter

I installed Solaris 11.1 on a X86 PC. It's working except for one glaring problem : I cannot get a driver attached to the RaLink RT2800 (Wi Fi Adapter). Can someone point me in the direction where " the correct" driver exists, or let me know how I can tell Solaris to attach the device to the... (1 Reply)
Discussion started by: JWH
1 Replies

2. Hardware

Need Sun 10-Gigabit Ethernet Adapter CD or ixge driver

Hi, Does anybody have a "Sun 10-Gigabit Ethernet Adapter installation CD" or driver ixge for Sun 10-Gigabit Ethernet PCI-X adapter? I need it but can't find it anywhere. So if you know where I can download it or purchase it, please let me know. (Already tried Oracle's website, don't have it) ... (5 Replies)
Discussion started by: Lhao
5 Replies

3. IP Networking

Virtual Adapter MAC address..

Hi, I just want to know whether two MAC address can exist in a adapter.. I mean one there will be mandatory one And another as user defined one.. Any replies will be more helpful.. Please help.. :wall: (0 Replies)
Discussion started by: Priya Amaresh
0 Replies

4. AIX

Adding Virtual Adapter to LPAR

Hello, hopefully someone can help me out with this, I have created a virtual Ethernet adapter on the VIO but would like to add it to my new LPAR. On my VIO only my disk is mapped. $ lsmap -all SVSA Physloc Client Partition ID --------------- --------------------------------------------... (5 Replies)
Discussion started by: audis$
5 Replies

5. Programming

Storing C++-struct in file - problem when adding new item in struct

Hi, I have received an application that stores some properties in a file. The existing struct looks like this: struct TData { UINT uSizeIncludingStrings; // copy of Telnet data struct UINT uSize; // basic properties: TCHAR szHost; //defined in Sshconfig UINT iPortNr; TCHAR... (2 Replies)
Discussion started by: Powerponken
2 Replies

6. AIX

Setting up an Integrated Virtual Ethernet adapter

All I am trying allocate an IVE to an LPAR (not a VIO) running AIX 7.1. I am getting the error: HSCL068A Explanation Logical port can not be assigned to Logical Partition because this Logical Partition is not the promiscuous LPAR for the physical port. Has anyone encountered this... (1 Reply)
Discussion started by: johnf
1 Replies

7. UNIX for Dummies Questions & Answers

Simulated driver for Network Interface Adapter

Hi all, I got sort of a task to do. I have to write in C "simulated network driver". What does it mean? - It has to run on all network adapters - It has to be as simple as it can be - It has to run on all linux distributions (or at least most of them) - It does not have to run a network... (4 Replies)
Discussion started by: Chrisdot
4 Replies

8. AIX

How to active this network adapter?

When I configure two VIO Servers, VIOS1 used to ping its gateway, after I configured second VIOS2, VIOS1 cannpt ping its gateway, when I run this command: entstat -all ent#|grep -i priority Priority: 5 Active: False How to make Active to True? (1 Reply)
Discussion started by: rainbow_bean
1 Replies

9. AIX

Power6 Virtual Fibre Channel Adapter

Hello, Searched in all IBM Redbooks and on the internet and couldn't find anything about the new feature of POWER 6 which Virtual Fibre ( Fiber ) channel adapter. It is similar to virtual scsi adapter. In my client partition I created the virtual Fibre Adapter mapped it with the VIO... (1 Reply)
Discussion started by: filosophizer
1 Replies

10. Programming

freeBSD device driver (use struct uio)

Hi, everybody I have next problem... 1) My Example program code void main() { int fd; int len; int buf; fd=open("mydev", O_RDONLY); lseek(fd, 0, SEEK_SET); len=read(fd, buf, sizeof(buf)); } 2) My Example Driver code static int mydev_read(dev_t dev, ?, ?, struct uio* uio) {... (0 Replies)
Discussion started by: Alex_T
0 Replies
Login or Register to Ask a Question