Changeset 89c57b6 in mainline for uspace/srv/net/nil/eth/eth.h


Ignore:
Timestamp:
2011-04-13T14:45:41Z (14 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
88634420
Parents:
cefb126 (diff), 17279ead (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/nil/eth/eth.h

    rcefb126 r89c57b6  
    3232
    3333/** @file
    34  *  Ethernet module.
    35  */
    36 
    37 #ifndef __NET_ETH_H__
    38 #define __NET_ETH_H__
     34 * Ethernet module.
     35 */
     36
     37#ifndef NET_ETH_H_
     38#define NET_ETH_H_
    3939
    4040#include <fibril_synch.h>
    4141#include <ipc/services.h>
    4242
    43 #include <net_device.h>
     43#include <net/device.h>
    4444#include <adt/measured_strings.h>
    4545
     46/** Ethernet address length. */
     47#define ETH_ADDR  6
     48
     49/** Ethernet header preamble value. */
     50#define ETH_PREAMBLE  0x55
     51
     52/** Ethernet header start of frame value. */
     53#define ETH_SFD  0xD5
     54
     55/** IEEE 802.2 unordered information control field. */
     56#define IEEE_8023_2_UI  0x03
     57
     58/** Type definition of the Ethernet header IEEE 802.3 + 802.2 + SNAP extensions.
     59 * @see eth_header_snap
     60 */
     61typedef struct eth_header_snap eth_header_snap_t;
     62
     63/** Type definition of the Ethernet header IEEE 802.3 + 802.2 + SNAP extensions.
     64 * @see eth_header_lsap
     65 */
     66typedef struct eth_header_lsap eth_header_lsap_t;
     67
     68/** Type definition of the Ethernet header LSAP extension.
     69 * @see eth_ieee_lsap
     70 */
     71typedef struct eth_ieee_lsap eth_ieee_lsap_t;
     72
     73/** Type definition of the Ethernet header SNAP extension.
     74 * @see eth_snap
     75 */
     76typedef struct eth_snap eth_snap_t;
     77
     78/** Type definition of the Ethernet header preamble.
     79 * @see preamble
     80 */
     81typedef struct eth_preamble eth_preamble_t;
     82
     83/** Type definition of the Ethernet header.
     84 * @see eth_header
     85 */
     86typedef struct eth_header eth_header_t;
     87
     88/** Ethernet header Link Service Access Point extension. */
     89struct eth_ieee_lsap {
     90        /**
     91         * Destination Service Access Point identifier.
     92         * The possible values are assigned by an IEEE committee.
     93         */
     94        uint8_t dsap;
     95       
     96        /**
     97         * Source Service Access Point identifier.
     98         * The possible values are assigned by an IEEE committee.
     99         */
     100        uint8_t ssap;
     101       
     102        /**
     103         * Control parameter.
     104         * The possible values are assigned by an IEEE committee.
     105         */
     106        uint8_t ctrl;
     107} __attribute__ ((packed));
     108
     109/** Ethernet header SNAP extension. */
     110struct eth_snap {
     111        /** Protocol identifier or organization code. */
     112        uint8_t protocol[3];
     113       
     114        /**
     115         * Ethernet protocol identifier in the network byte order (big endian).
     116         * @see ethernet_protocols.h
     117         */
     118        uint16_t ethertype;
     119} __attribute__ ((packed));
     120
     121/** Ethernet header preamble.
     122 *
     123 * Used for dummy devices.
     124 */
     125struct eth_preamble {
     126        /**
     127         * Controlling preamble used for the frame transmission synchronization.
     128         * All should be set to ETH_PREAMBLE.
     129         */
     130        uint8_t preamble[7];
     131       
     132        /**
     133         * Start of Frame Delimiter used for the frame transmission
     134         * synchronization.
     135         * Should be set to ETH_SFD.
     136         */
     137        uint8_t sfd;
     138} __attribute__ ((packed));
     139
     140/** Ethernet header. */
     141struct eth_header {
     142        /** Destination host Ethernet address (MAC address). */
     143        uint8_t destination_address[ETH_ADDR];
     144        /** Source host Ethernet address (MAC address). */
     145        uint8_t source_address[ETH_ADDR];
     146       
     147        /**
     148         * Ethernet protocol identifier in the network byte order (big endian).
     149         * @see ethernet_protocols.h
     150         */
     151        uint16_t ethertype;
     152} __attribute__ ((packed));
     153
     154/** Ethernet header IEEE 802.3 + 802.2 extension. */
     155struct eth_header_lsap {
     156        /** Ethernet header. */
     157        eth_header_t header;
     158       
     159        /**
     160         * LSAP extension.
     161         * If DSAP and SSAP are set to ETH_LSAP_SNAP the SNAP extension is being
     162         * used.
     163         * If DSAP and SSAP fields are equal to ETH_RAW the raw Ethernet packet
     164         * without any extensions is being used and the frame content starts
     165         * rigth after the two fields.
     166         */
     167        eth_ieee_lsap_t lsap;
     168} __attribute__ ((packed));
     169
     170/** Ethernet header IEEE 802.3 + 802.2 + SNAP extensions. */
     171struct eth_header_snap {
     172        /** Ethernet header. */
     173        eth_header_t header;
     174       
     175        /**
     176         * LSAP extension.
     177         * If DSAP and SSAP are set to ETH_LSAP_SNAP the SNAP extension is being
     178         * used.
     179         * If DSAP and SSAP fields are equal to ETH_RAW the raw Ethernet packet
     180         * without any extensions is being used and the frame content starts
     181         * rigth after the two fields.
     182         */
     183        eth_ieee_lsap_t lsap;
     184       
     185        /** SNAP extension. */
     186        eth_snap_t snap;
     187} __attribute__ ((packed));
     188
     189/** Ethernet Frame Check Sequence. */
     190typedef uint32_t eth_fcs_t;
     191
    46192/** Type definition of the Ethernet global data.
    47  *  @see eth_globals
    48  */
    49 typedef struct eth_globals      eth_globals_t;
     193 * @see eth_globals
     194 */
     195typedef struct eth_globals eth_globals_t;
    50196
    51197/** Type definition of the Ethernet device specific data.
    52  *  @see eth_device
    53  */
    54 typedef struct eth_device       eth_device_t;
    55 
    56 /** Type definition of the Ethernet device specific data pointer.
    57  *  @see eth_device
    58  */
    59 typedef eth_device_t *          eth_device_ref;
     198 * @see eth_device
     199 */
     200typedef struct eth_device eth_device_t;
    60201
    61202/** Type definition of the Ethernet protocol specific data.
    62  *  @see eth_proto
    63  */
    64 typedef struct eth_proto        eth_proto_t;
    65 
    66 /** Type definition of the Ethernet protocol specific data pointer.
    67  *  @see eth_proto
    68  */
    69 typedef eth_proto_t *           eth_proto_ref;
     203 * @see eth_proto
     204 */
     205typedef struct eth_proto eth_proto_t;
    70206
    71207/** Ethernet device map.
    72  *  Maps devices to the Ethernet device specific data.
    73  *  @see device.h
    74  */
    75 DEVICE_MAP_DECLARE(eth_devices, eth_device_t)
     208 * Maps devices to the Ethernet device specific data.
     209 * @see device.h
     210 */
     211DEVICE_MAP_DECLARE(eth_devices, eth_device_t);
    76212
    77213/** Ethernet protocol map.
    78  *  Maps protocol identifiers to the Ethernet protocol specific data.
    79  *  @see int_map.h
    80  */
    81 INT_MAP_DECLARE(eth_protos, eth_proto_t)
    82 
    83 /** Ethernet device specific data.
    84  */
    85 struct  eth_device{
    86         /** Device identifier.
    87          */
     214 * Maps protocol identifiers to the Ethernet protocol specific data.
     215 * @see int_map.h
     216 */
     217INT_MAP_DECLARE(eth_protos, eth_proto_t);
     218
     219/** Ethernet device specific data. */
     220struct eth_device {
     221        /** Device identifier. */
    88222        device_id_t device_id;
    89         /** Device driver service.
    90          */
     223        /** Device driver service. */
    91224        services_t service;
    92         /** Driver phone.
    93          */
     225        /** Driver phone. */
    94226        int phone;
    95         /** Maximal transmission unit.
    96          */
     227        /** Maximal transmission unit. */
    97228        size_t mtu;
    98         /** Various device flags.
    99          *  @see ETH_DUMMY
    100          *  @see ETH_MODE_MASK
     229       
     230        /**
     231         * Various device flags.
     232         * @see ETH_DUMMY
     233         * @see ETH_MODE_MASK
    101234         */
    102235        int flags;
    103         /** Actual device hardware address.
    104         */
    105         measured_string_ref addr;
    106         /** Actual device hardware address data.
    107         */
    108         char * addr_data;
     236       
     237        /** Actual device hardware address. */
     238        measured_string_t *addr;
     239       
     240        /** Actual device hardware address data. */
     241        uint8_t *addr_data;
    109242};
    110243
    111 /** Ethernet protocol specific data.
    112  */
    113 struct eth_proto{
    114         /** Protocol service.
    115          */
     244/** Ethernet protocol specific data. */
     245struct eth_proto {
     246        /** Protocol service. */
    116247        services_t service;
    117         /** Protocol identifier.
    118          */
     248        /** Protocol identifier. */
    119249        int protocol;
    120         /** Protocol module phone.
    121          */
     250        /** Protocol module phone. */
    122251        int phone;
    123252};
    124253
    125 /** Ethernet global data.
    126  */
    127 struct  eth_globals{
    128         /** Networking module phone.
    129          */
     254/** Ethernet global data. */
     255struct eth_globals {
     256        /** Networking module phone. */
    130257        int net_phone;
    131         /** Safety lock for devices.
    132          */
     258        /** Safety lock for devices. */
    133259        fibril_rwlock_t devices_lock;
    134         /** All known Ethernet devices.
    135          */
     260        /** All known Ethernet devices. */
    136261        eth_devices_t devices;
    137         /** Safety lock for protocols.
    138          */
     262        /** Safety lock for protocols. */
    139263        fibril_rwlock_t protos_lock;
    140         /** Protocol map.
    141          *  Service phone map for each protocol.
     264       
     265        /**
     266         * Protocol map.
     267         * Service phone map for each protocol.
    142268         */
    143269        eth_protos_t protos;
    144         /** Broadcast device hardware address.
    145         */
    146         measured_string_ref broadcast_addr;
     270       
     271        /** Broadcast device hardware address. */
     272        measured_string_t *broadcast_addr;
    147273};
    148274
Note: See TracChangeset for help on using the changeset viewer.