/// ************************************************************************ /// Copyright (C) 2001, Patrick Charles and Jonas Lehmann * /// Distributed under the Mozilla Public License * /// http://www.mozilla.org/NPL/MPL-1.1.txt * /// ************************************************************************* /// namespace SharpPcap.Packets { /// Information about network link layers. /// /// public class LinkLayer : LinkLayers { /// Fetch the header length associated with various link-layer types. /// the link-layer code /// /// the length of the header for the specified link-layer /// public static int getLinkLayerLength(int layerType) { switch (layerType) { case LinkLayers_Fields.ARCNET: return 6; case LinkLayers_Fields.SLIP: return 16; case LinkLayers_Fields.SLIP_BSDOS: return 24; case LinkLayers_Fields.NULL: case LinkLayers_Fields.LOOP: return 4; case LinkLayers_Fields.PPP: case LinkLayers_Fields.CHDLC: case LinkLayers_Fields.PPP_SERIAL: return 4; case LinkLayers_Fields.PPP_BSDOS: return 24; case LinkLayers_Fields.FDDI: return 21; case LinkLayers_Fields.IEEE802_11: return 22; case LinkLayers_Fields.ATM_RFC1483: return 8; case LinkLayers_Fields.RAW: return 0; case LinkLayers_Fields.ATM_CLIP: return 8; case LinkLayers_Fields.LINUX_SLL: return 16; case LinkLayers_Fields.EN10MB: default: return 14; } } /// Fetch the offset into the link-layer header where the protocol code /// can be found. Returns -1 if there is no embedded protocol code. /// /// the link-layer code /// /// the offset in bytes /// public static int getProtoOffset(int layerType) { switch (layerType) { case LinkLayers_Fields.ARCNET: return 2; case LinkLayers_Fields.SLIP: return - 1; case LinkLayers_Fields.SLIP_BSDOS: return - 1; case LinkLayers_Fields.NULL: case LinkLayers_Fields.LOOP: return 0; case LinkLayers_Fields.PPP: case LinkLayers_Fields.CHDLC: case LinkLayers_Fields.PPP_SERIAL: return 2; case LinkLayers_Fields.PPP_BSDOS: return 5; case LinkLayers_Fields.FDDI: return 13; case LinkLayers_Fields.IEEE802_11: return 14; case LinkLayers_Fields.ATM_RFC1483: return 6; case LinkLayers_Fields.RAW: return - 1; case LinkLayers_Fields.ATM_CLIP: return 6; case LinkLayers_Fields.LINUX_SLL: return 14; case LinkLayers_Fields.EN10MB: default: return 12; } } /// Fetch a link-layer type description. /// the code associated with the description. /// /// a description of the link-layer type. /// public static System.String getDescription(int code) { System.Int32 c = (System.Int32) code; if (descriptions.ContainsKey(c)) { //UPGRADE_TODO: Method 'java.util.HashMap.get' was converted to 'System.Collections.Hashtable.Item' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMapget_javalangObject'" return (System.String) descriptions[c]; } else return "unknown"; } /// 'Human-readable' link-layer type descriptions. //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMap'" private static System.Collections.Hashtable descriptions = new System.Collections.Hashtable(); static LinkLayer() { { descriptions[(System.Int32) LinkLayers_Fields.NULL] = "no link-layer encapsulation"; descriptions[(System.Int32) LinkLayers_Fields.EN10MB] = "10/100Mb ethernet"; descriptions[(System.Int32) LinkLayers_Fields.EN3MB] = "3Mb experimental ethernet"; descriptions[(System.Int32) LinkLayers_Fields.AX25] = "AX.25 amateur radio"; descriptions[(System.Int32) LinkLayers_Fields.PRONET] = "proteon pronet token ring"; descriptions[(System.Int32) LinkLayers_Fields.CHAOS] = "chaos"; descriptions[(System.Int32) LinkLayers_Fields.IEEE802] = "IEEE802 network"; descriptions[(System.Int32) LinkLayers_Fields.ARCNET] = "ARCNET"; descriptions[(System.Int32) LinkLayers_Fields.SLIP] = "serial line IP"; descriptions[(System.Int32) LinkLayers_Fields.PPP] = "point-to-point protocol"; descriptions[(System.Int32) LinkLayers_Fields.FDDI] = "FDDI"; descriptions[(System.Int32) LinkLayers_Fields.ATM_RFC1483] = "LLC/SNAP encapsulated ATM"; descriptions[(System.Int32) LinkLayers_Fields.RAW] = "raw IP"; descriptions[(System.Int32) LinkLayers_Fields.SLIP_BSDOS] = "BSD SLIP"; descriptions[(System.Int32) LinkLayers_Fields.PPP_BSDOS] = "BSD PPP"; descriptions[(System.Int32) LinkLayers_Fields.ATM_CLIP] = "IP over ATM"; descriptions[(System.Int32) LinkLayers_Fields.PPP_SERIAL] = "PPP over HDLC"; descriptions[(System.Int32) LinkLayers_Fields.CHDLC] = "Cisco HDLC"; descriptions[(System.Int32) LinkLayers_Fields.IEEE802_11] = "802.11 wireless"; descriptions[(System.Int32) LinkLayers_Fields.LOOP] = "OpenBSD loopback"; descriptions[(System.Int32) LinkLayers_Fields.LINUX_SLL] = "Linux cooked sockets"; descriptions[(System.Int32) LinkLayers_Fields.UNKNOWN] = "unknown link-layer type"; } } } }