source: mainline/uspace/lib/net/include/protocol_map.h@ 849ed54

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 849ed54 was 849ed54, checked in by Martin Decky <martin@…>, 15 years ago

Networking work:
Split the networking stack into end-user library (libsocket) and two helper libraries (libnet and libnetif).
Don't use over-the-hand compiling and linking, but rather separation of conserns.
There might be still some issues and the non-modular networking architecture is currently broken, but this will be fixed soon.

  • Property mode set to 100644
File size: 4.2 KB
Line 
1/*
2 * Copyright (c) 2009 Lukas Mejdrech
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup net_nil
30 * @{
31 */
32
33/** @file
34 * Internetwork layer services - network interface layer service type translation.
35 */
36
37#ifndef __NET_PROTOCOL_MAP_H__
38#define __NET_PROTOCOL_MAP_H__
39
40#include <ipc/services.h>
41
42#include <ethernet_lsap.h>
43#include <ethernet_protocols.h>
44#include <net_hardware.h>
45
46/** Maps the internetwork layer service to the network interface layer type.
47 * @param[in] nil Network interface layer service.
48 * @param[in] il Internetwork layer service.
49 * @returns Network interface layer type of the internetworking layer service.
50 * @returns 0 if mapping is not found.
51 */
52static inline eth_type_t protocol_map(services_t nil, services_t il){
53 switch(nil){
54 case SERVICE_ETHERNET:
55 case SERVICE_DP8390:
56 switch(il){
57 case SERVICE_IP:
58 return ETH_P_IP;
59 case SERVICE_ARP:
60 return ETH_P_ARP;
61 default:
62 return 0;
63 }
64 default:
65 return 0;
66 }
67}
68
69/** Maps the network interface layer type to the internetwork layer service.
70 * @param[in] nil Network interface layer service.
71 * @param[in] protocol Network interface layer type.
72 * @returns Internetwork layer service of the network interface layer type.
73 * @returns 0 if mapping is not found.
74 */
75static inline services_t protocol_unmap(services_t nil, int protocol){
76 switch(nil){
77 case SERVICE_ETHERNET:
78 case SERVICE_DP8390:
79 switch(protocol){
80 case ETH_P_IP:
81 return SERVICE_IP;
82 case ETH_P_ARP:
83 return SERVICE_ARP;
84 default:
85 return 0;
86 }
87 default:
88 return 0;
89 }
90}
91
92/** Maps the link service access point identifier to the Ethernet protocol identifier.
93 * @param[in] lsap Link service access point identifier.
94 * @returns Ethernet protocol identifier of the link service access point identifier.
95 * @returns ETH_LSAP_NULL if mapping is not found.
96 */
97static inline eth_type_t lsap_map(eth_lsap_t lsap){
98 switch(lsap){
99 case ETH_LSAP_IP:
100 return ETH_P_IP;
101 case ETH_LSAP_ARP:
102 return ETH_P_ARP;
103 default:
104 return ETH_LSAP_NULL;
105 }
106}
107
108/** Maps the Ethernet protocol identifier to the link service access point identifier.
109 * @param[in] ethertype Ethernet protocol identifier.
110 * @returns Link service access point identifier.
111 * @returns 0 if mapping is not found.
112 */
113static inline eth_lsap_t lsap_unmap(eth_type_t ethertype){
114 switch(ethertype){
115 case ETH_P_IP:
116 return ETH_LSAP_IP;
117 case ETH_P_ARP:
118 return ETH_LSAP_ARP;
119 default:
120 return 0;
121 }
122}
123
124/** Maps the network interface layer services to the hardware types.
125 * @param[in] nil The network interface service.
126 * @returns The hardware type of the network interface service.
127 * @returns 0 if mapping is not found.
128 */
129static inline hw_type_t hardware_map(services_t nil){
130 switch(nil){
131 case SERVICE_ETHERNET:
132 case SERVICE_DP8390:
133 return HW_ETHER;
134 default:
135 return 0;
136 }
137}
138
139#endif
140
141/** @}
142 */
Note: See TracBrowser for help on using the repository browser.