Paper Menu >>
Journal Menu >>
![]() Journal of Software Engineering and Applications, 2011, 4, 379-387 doi:10.4236/jsea.2011.46043 Published Online June 2011 (http://www.SciRP.org/journal/jsea) Copyright © 2011 SciRes. JSEA 379 Stack E6 and Its Implementation within Linux Kernel Dmitry Anatoly Zaitsev, Kyril Dmitry Guliaiev Department of Computer Science, International Humanitarian University, Odessa, Ukraine. Email: zsoftua@yahoo.com, k.guliaiev@gmail.com Received February 5th, 2010; revised March 18th, 2 0 1 1; accepted April 16th, 2011. ABSTRACT The first implemen tation of new E6 stack of networking protocols within the kernel of an operating system is presented. Stack E6 was developed to increase the efficiency of a network entirely built on the base of Ethernet technology. It uses a uniform hierarchical E6 address on all the levels and annuls TCP, UDP and IP protocols. The experimental imple- mentation adds a new system call to the kernel of Linux and a new type of Ethernet E6 frame. All the application in ter- face standards are saved according to RFC except of E6 address usage instead of IP address and instead of Ethernet MAC address as well. Keywords: Stack of Protocols, E6, Linux, Kernel, System Call, Ethernet 1. Introduction Stack of protocols E6 was presented in [1] then the cor- responding patent of Ukraine on utility model [2] was obtained and the robustness of E6 networks was ac- knowledged [3] via modeling in CPN Tools. The next steps assume its implementation within real-life operat- ing systems and the development of special hardware namely switching routers E6 (SRE6). On the periphery of E6 network usual Ethernet switches could be employed but the maximal efficiency supposes special hardware usage. Linux kernels are open source, making implementation of the new protocol stacks possible. Different approaches could be chosen but the present implementation is de- veloped as an independent one without the integration with Unix socket facilities. This approach is justified by the fact that Unix sockets are rather heavy and closely related with TCP/IP protocols family while the stack E6 does not use their facilities. The only requirement was to save the application interfaces providing the further ad- aptation of TCP/IP application software into E6 net- works. Thus the main principle of the implementation was to provide the application interface according to TCP and UDP standards [4,5] and the interface according to Ethernet standards [6] as well as independent work of stack E6 among other protocols. Ethernet frames are multiplexed/demultiplexed using the type field with new value 0xE600 which corresponds to E6 frames. The us- age of TCP and UPD application interface standards [4,5] provides the possibility of the code reuse in other oper- ating systems. So this implementation within Linux ker- nel could be considered rather non Unix-de pendent as far as it is not based on the Unix socket facilities. The present experimental implementation does not employ Ethernet LLC2 facilities and provides the appli- cation interfaces of UPD protocol only. The implementa- tion of TCP application interfaces requires Ether-net LLC2 sliding window procedures usage instead of TCP protocol procedures and is the subject for future work. 2. An Overview of E6 Technology E6 technology [1,2] is based on two pivotal ideas: to use the same uniform hierarchical E6 address with the length of 6 bytes (Figure 1) on all the levels of the open sys- tems interconnection model and to employ Ethernet LLC2 sliding window procedures instead of protocol TCP for guaranteed deliv ery of in formatio n. As result only the pair of software port numbers is left to be put into the packet header (E6p2 header—Figure 2) and the rest of job is shifted to the Ethernet Data-Link layer by the E6 Concordance software (Figure 3). As for additional QoS parameters, they could be put into VLAN header of the frame. Actually E6 annuls TCP, UDP and IP protocols and the reminder is 4 bytes of the E6p2 header. It annuls also the mapping of IP addresses into ![]() Stack E6 and Its Implementation within Linux Kern e l 380 Figure 1. The format of E6 address. Figure 2. The E6p2 header. Figure 3. The stack of E6 protocols. MAC addresses and corresponding ARP/RARP protocols which consumes a bulk of time on hosts and routers. As far as E6 address is hierarchical in the same way as CIDR IP address it provides the world-wide network construction at the expense of hosts and subnets ad- dresses aggregation under common mask that considera- bly reduces the address table size. Ethernet suffers from its plain MAC addresses which overflow address tables of switches because of each individual address should be listed. As far as E6 address has the same length as Ethernet MAC address (namely 6 octets) it can be put directly into the address field of the Ethernet frame in- stead of MAC address. Modern Ethernet adapters allow the assigning new MAC address to the interface and E6 address is assigned. To provide an indep endent existence of E6 technolog y a new type of E6 Ethernet frames is introduced (0xE600). Hosts running E6 stack accept E6 frames while other hosts simply ignore them. Usual Ethernet switches de- liver E6 frames freely because they do not analyze the frame type field usually. Traditional IP routers will drop unknown E6 packets occasionally delivered as result of broadcasting. So E6 could exist with in Ethernet switched network. To provide the scalability, special E6 switching routers (SRE6) should be developed or at least implemented as patches to the usual software of known routers. The sim- plest SRE6 could be created on the base of Unix com- puter with a few Ethernet cards. The packet delivery scheme shown in Figure 4 illus- trates the advantages of E6 technology: the same pair of destination and source E6 addresses is constant through the entire delivery path. SRE6 only analyze the destina- tion E6 address and switch the packet to the destination port; no add itional IP-MAC ad dresses mapping , no p ac ke t overhead with more than 40 octets of TCP and IP head- ers. The computational resources of the devices are saved for higher performance and better QoS, which is espe- cially significant for VoIP applications. Note that, E6 technology is justified for the present headers. The computational resources of the devices are saved for higher performance and better QoS, which is especially significant for VoIP applications. Note that, E6 technology is justified for the present Copyright © 2011 SciRes. JSEA ![]() Stack E6 and Its Implementation within Linux Kern e l381 Figure 4. The E6 packet delivery scheme. time and future tendencies — Ethernet dominates at the layer: LAN—1, 10 Gbps, campus and metropolitan networks—10 Gbps over DWDM, backbones—PBB, access networks—last-mile-Ethernet, wireless—WiFi. 3. Application Interfaces All the code was developed as a loadable Linux kernel module E6udpmod.ko save the minor changes to the static part of the kernel with the goal to add a new system call. A conditional system call 324 with the name E6_call was added to the static part of the kernel. This conditional system call is devised to implement all the present and future E6 application interface routines. The static part of the kernel contains a pointer for the new system call 324 (which is not used in 2.6.22.9 version of the kernel) to the dummy routine sys_E6call which checks the pointer new_sys_E6call to the actual routine and calls it in the case the pointer is not equal to NULL. The pointer is initialized with the value NULL so when E6updmod.ko module is unloaded nothing occurs except sys_E6call could write messages into system log file when it is called. The pointer new_sys_E6call is exp orted by the kernel for the usage in modules. The details are represented in Listing 1. The rest of the work is done by the module E6udpmod.ko. At initialization it sets th e pointer new_ sys_E6 call to the actual entry routine as well as finds Ethernet device E6_dev, copies its hardware address and registers a new E6 packet handler (Listing 2). After the statement new_sys_E6call = mod_sys_E6call all the E6 system calls are handled by the routine mod_sys_E6call which is situated within E6updmod.ko and works as a dispatcher of conditional calls recognized by their numbers defined by the variable call. The interface at the application level is provided by the library E6udplib (Listing 3) that contains user-end rou- tines E6sendmsg, E6rcvmsg, E6regport, E6unregport, E6waitmsg which finally exert system call 324 using syscall routine from the standard library libc. Listing 1. Implementation of new system call within kernel. Copyright © 2011 SciRes. JSEA ![]() Current Distortion Evaluation in Traction 4Q Constant Switching Frequency Converters 382 Listing 2. Implementation of conditional call within loadable module. The set of routines E6sendmsg, E6rcvmsg, E6regport, E6unregport, E6waitmsg completely satisfy the require- ments of RFC 768 on application interface of UDP pro- tocol. The interactio n between the software code situated in the static part of the kernel, in the loadable module and in the user-end library is illustrated in Figure 5. User interface library E6udplib was employed for the development of simple E6talk application which pro- vides the exchange of textual messages within E6 net- work on the base of switched Ethernet. The application Copyright © 2011 SciRes. JSEA ![]() Current Distortion Evaluation in Traction 4Q Constant Switching Frequency Converters 383 Listing 3. E6 user-end library. successfully provides real-life communication which ac- knowledges the robustness of the stack E6. To acknowl- edge the efficiency of E6 technology before TCP/IP pro- tocols family a lot of work should be done yet. A traffic analyzer such as Wireshark allows the watching E6 Ethernet frames which are transmitted freely among oth- er types of frames and do not hamper the work of other protocols. So E6 network exists in a parallel world re- garding TCP/IP till the gateways b etween E6 an d TCP/IP networks will have been done which is the direction for future work. 4. Interfaces The interface with Ethernet hardware within Linux ker- nel is provided by the struct net_device which contains the device description and functions. The valid functions are given by the set of pointers which point to the actual routines of the current Ethernet driver; the basic routines are: open, stop, hard_start_xmit. The structure net_device contains the header of the output packets queue; the packet is represented by struct sk_buff * skb. Figure 5. The interaction between the user, kernel and mo- dule software code. Copyright © 2011 SciRes. JSEA ![]() Stack E6 and Its Implementation within Linux Kern e l 384 Listing 4. Registering E6 packets within kernel. The interfaces are left without changes but only used for E6 Ethernet frames transmission. The multiplexing at sending E6 packets is implemented via the new type of E6 Ethernet frames ETH_P_E6 (Listing 4). The module fills in sk_buff with the user data and E6 headers using ETH_P_E6 type of frame and calls hard_start_xmit passing the buck to the Ethernet driver for the transmitting of the packet throug h the media. The receiving of E6 packet is more complicated be- cause it is done by the Ethernet driver on hardware in- terrupt. The driver allocates and fills in sk_buff with the arrived packet and then provides the demultiplexing pro- cedure based on the registered types of packets. The reg- istration of the packet types is implemented with struct packet_type and is represented in Listing 4. So after the statement dev_add_pack in the module in- itialization routine E6udpmod_init_module (Listing 2), all the arrived packets of the type ETH_P_E6 are proc- essed by E6_rcv routine situated within E6udpmod.ko module. Thus the two way interfaces with the layer are installed: for the sending E6 packets and for the receiving E6 packets. Note that, E6 packets and corresponding E6 frames are transmitted independently among other types of Ethernet frames. The scheme shown in Figure 6 ex- plains the interfaces of E6udpmod.ko with the Ethernet layer. 5. Internal Data Structures and Routines Besides the described above initialization routine E6- udpmod_init_module and the dispatcher of the condi- tional system call 324 with the name mod_sys_E6call the module E6udpmod.ko contains the following routines: routines for the implementation of conditional calls E6_sendmsg, E6_rcvmsg, E6_regport, E6_unregport, E6_waitmsg; the routine for the processing of arrived E6 packets E6_rcv; the module exit routine E6udpmod_ cleanup_module. The interaction of the mentioned rou- tines is shown in Figure 5. Let us consider the basic data structures of the E6udpmod.ko module. Note that according to RFC 768 the source port of an application should be registered. Figure 6. The interfaces with the layer. Messages can be sent only from a registered port as well as messages can be received only to a registered port. So, the basic data structure is the list of registered ports. As the sending of a message is completely done during one system call E6sendmsg, the queues of output packets are not created within E6udpmod.ko module; sk_buff is al- located, data copied from the user address space, E6 headers created and finally sk_buff is put into the driver packet output queue via driver routine hard_start_xmit call. At the arrival of a new E6 packet, E6_rcv routine is called by the driver and the packet is put into the appro- priate queue to the registered port. Routine E6_rcv puts the packet to the tail of the queue; system call E6_ rcvmsg gets the packet from the head of the queue. When the destination por t is unregistered (unknown) the packet is dropped. Thus two levels of queues are created: the queue of registered ports and the queues of received packets (to registered ports). Figure 7 shows the interconnection of the basic data. The description of the corresponding data structures is given in Listing 5. Copyright © 2011 SciRes. JSEA ![]() Stack E6 and Its Implementation within Linux Kern e l385 struct E6portq { struct E6portq * next; struct E6portq * prev; u16 E6reg_port; pid_t pid; int qlen; struct sk_buf * skbhead; struct sk_buf * skbtail; } static struct E6portq * E6inpq_head = NULL; static struct E6portq * E6inpq_tail = N ULL; int E6_sendmsg( struct E6msg_buf __user *msg ) { int len; struct sk_buff *skb; struct E6hdr *E6h; struct ethhdr *eth; unsigned long flags; int rc=0; copy_from_user(km, msg, sizeof(struct E6msg_buf))); len=km->len; if( E6find_regport( E6src_port ) = = NULL ) { rc = E6ERRUNREGPORT; return rc; } skb=alloc_skb(len+E6HEADSSPACE, GFP_KERNEL); skb->dev=E6_dev; skb->sk=NULL; /* Copy data */ skb_reserve(skb, E6HEADSSPACE); copy_from_user( skb_put(skb,len), km->E6data, len ); /* Build the E6P2 header. */ skb_push(skb, sizeof(struct E6hdr)); skb_reset_transport_header(skb); E6h = (struct E6hdr *)skb_transport_header(skb); E6h->E6dst_port = htons( km->E6dst_port ); E6h->E6src_port = htons( km->E6src_port ); skb_reset_network_header(skb); /* Build the E6Ethernet header */ skb_push(skb, ETH_HLEN); skb_reset_mac_header(skb); eth = (struct ethhdr *)skb_mac_header(skb); skb->protocol = eth->h_proto = htons(ETH_P_E6); memcpy(eth->h_source, E6_myaddr, dev->addr_len); memcpy(eth->h_dest, km->E6dst_addr, dev->addr_len); /* Pass skb to the driver */ local_irq_save(flags); netif_tx_lock(dev); rc=dev->hard_start_xmit(skb,dev); netif_tx_unlock(dev); local_irq_restore(flags); return rc; } Listing 5. Sending E6 messages via Ethernet driver. Let us consider the sending of E6 messages in details (Listing 5). Routine E6_sendmsg copies the message header from the user address space (copy_from_user), checks whether the source port is registered, allocates skb, copies the data from the user address space, fills in E6h and eth headers and passes skb to the driver (hard_ start_xmit). Bri ef descript ion of other routines i s gi v en i n Li sting 6. Copyright © 2011 SciRes. JSEA ![]() Stack E6 and Its Implementation within Linux Kern e l 386 int E6_getmsg( u16 __user *upn, struct E6msg_buf __user *msg ) // finds registered port with the number pn=*upn // checks weather the port pn belongs to the current process // checks weather the skb queue to the port pn is empty // extracts the head element from s kb queue // copies the message he ader and the data into the user data space // frees skb int E6_rcv(struct sk_buff *skb, st ruct net_device *dev, struct packet_type *pt, struct net_device *orig_dev) // extracts the destination port number dp from skb // finds registered port with the number dp; if unregistered, drops skb // checks the skb queue limit; if exceeded, drops skb // puts skb into the tail of port dp queue // checks the waiting flag and wakes up the waiting process int E6_waitmsg( u16 __user *upn ) // checks weather the port pn=*upn is registered and belongs to the current process // checks the skb queue is empty; if empty, blocks the current processing int E6_regport( u16 __user *upn ) // checks weather the port pn=*upn is re gistered; if yes, returns an error // creates new E6portq record, fills it in and puts it to the registered ports queue int E6_unregport( u16 __user *upn ) // checks weather the port pn=*upn is registered; if no, returns an error // checks weather the port pn belongs to the current process; if no, returns an error // frees all the skb in the queue to the por t pn (drops packets) // extracts E6portq record from the list and frees it void E6udpmod_cleanup_module(void) // unregisters E6 packet type: dev_remove_pack(&E6_packet_type) ; // unregisters module system call handler: new_sys_E6call = NULL; // frees the ports list and the corresponding skb queues Listing 6. Brief description of E6 module r outines. Figure 7. The basic data structures. Note that the shown fragments of code are rather simpli- fied for the brevity, numerous checks of the routines re- turn codes and corresponding actions on errors were omitted. 6. Conclusions It was implemented the first kernel level E6 protocol stacks on Linux, kernel version 2.6.22.9. The robustness of E6 network was confirmed by the successful running of E6talk application among other networking applica- tions and protocols. The datagram mode of the communication was im- plemented (UDP like). The implementation of the data segment mode with the guaranteed delivery of informa- tion (TCP like) on the base of Ethernet LLC2 is the di- rection for future work as well as the building gateways between E6 and TCP/IP networks which exist now in parallel. REFERENCES [1] P. P. Vorobiyenko, D. A. Zaitsev and O. L. Nechiporuk, “World-Wide Network Ethernet?” Zviazo k (Communica- tions), No. 5, 2007, pp. 14-19. [2] P. P. Vorobiyenko, D. A. Zaitsev and K. D. Guliaiev, “Way of Data Transmission within Network with Substi- tution of Network and Transport Layers by Universal Technology of Layer,” Patent of Ukraine on Utility Mod- el, No. 35773, 2008. [3] K. D. Guliaiev, D. A. Zaitsev, D. A. Litvin and E. V. Radchenko, “Simulating E6 Protocol Networks Using Copyright © 2011 SciRes. JSEA ![]() Stack E6 and Its Implementation within Linux Kern e l387 CPN Tools,” Proceeding of International Conference on IT Promotion in Asia, 22-26 September 2008, Tashkent, pp. 203-208. [4] J. Postel, “Transmission Control Protocol,” Information Sciences Institute, University of Southern California, Los Angeles, No. RFC 793, 1981, p. 85. [5] J. Postel, “User Datagram Protocol,” Information Sci- ences Institute, University of Southern California, Los Angeles, No. RFC 768, 1980, p. 3. [6] Carrier Sense Multiple Access with Collision Detection (CSMA/CD), “Access Method and Physical Layer Speci- fications—LAN/MAN Standards Committee of the IEEE Computer Society,” IEEE Std 802.3-2005, IEEE-SA Standards Board IP, 9 June 2005, p. 417. Copyright © 2011 SciRes. JSEA |