com.ibm.as400.util.commtrace.IP6Header Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: IP6Header.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 2002 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.util.commtrace;
import com.ibm.as400.access.Trace;
import java.util.Properties;
/**
* An IPv6 Header.
* Extends Header's methods to parse, print, and allow easy access to the IPv6 Header.
*/
public class IP6Header extends Header {
Field version= new Dec(rawheader.slice(0, 4));
Field trafficclass= new Hex(rawheader.slice(4, 8));
Field flowlabel= new Hex(rawheader.slice(12, 20));
Field payloadlength= new Dec(rawheader.slice(32, 16));
Field nextheaderh= new Hex(rawheader.slice(48, 8));
Field nextheader= new Dec(rawheader.slice(48, 8));
Field hoplimit= new Dec(rawheader.slice(56, 8));
Field src= new IP6Address(rawheader.slice(64, 128));
Field dst= new IP6Address(rawheader.slice(192, 128));
private final static String CLASS="IP6Header";
private final static String ICMPV6= "ICMPv6";
private final static String TCP= "TCP";
private final static String UDP= "UDP";
private final static String EXTHOPHOP= "ExtHeader Hop by Hop";
private final static String EXTROUTE= "ExtHeader Routing";
private final static String EXTFRAG= "ExtHeader Fragmentation";
private final static String EXTESP= "ExtHeader ESP";
private final static String EXTAH= "ExtHeader AH";
private final static String EXTDST= "ExtHeader Destination";
private final static String IPV6DATA= "IPv6 Data";
private final static String VER= "Ver";
private final static String TRAFFICCLASS= "TrafficClass";
private final static String FLWLBL= "FlowLabel";
private final static String PAYLOADLENGTH= "PayloadLength";
private final static String NXTHDR= "NextHeader";
private final static String HOPLIMIT= "HopLimit";
private final static String SRC= "Src";
private final static String DST= "Dst";
/**
* Creates and parses the data of this header.
* @param data The raw data of this header.
*/
IP6Header(BitBuf data) {
super(data);
type= IP6;
}
/**
* Returns the length of this header.
* @return Will always return 320.
*/
public int getHeaderLen() {
return 320;
}
public Header getNextHeader() {
return Header.createHeader(rawheader.slice(48, 8).toByte(), rawpayload);
}
/**
* Returns a printable representation of this header.
* @param filter FormatProperties object for filtering this header.
* @return Returns a string representation of this header.
*/
public String toString(FormatProperties filter) {
String nextheaders= "";
// Make sure we have enough data to parse a full header
if (rawheader.getBitSize() < getHeaderLen()) {
return (new Data(rawheader)).toString();
}
int protocol= Integer.parseInt(nextheader.toString());
// Check for IP filtering
if (filter!=null) { // If filter is enabled
boolean print= false;
String IPaddr= filter.getIPAddress(),
IPaddr2= filter.getSecondIPAddress();
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.INFORMATION,CLASS + ".toString() " + "Filter Properties:" + IPaddr + " " + IPaddr2);
}
if (IPaddr == null && IPaddr2 == null) {
print= true; // The filtering doesn't apply to this header
// If only one address is specified.
} else if(IPaddr==null) {
// If either address matches we print this record
if (src.toString().equals(IPaddr2) || dst.toString().equals(IPaddr2)) {
print= true;
}
} else if (IPaddr2 == null) {
// If either address matches we print this record
if (src.toString().equals(IPaddr) || dst.toString().equals(IPaddr)) {
print= true;
}
// Both addresses were specified
// The packet must match both addresses in any order before its
// printed
} else if (
(src.toString().equals(IPaddr) || src.toString().equals(IPaddr2))
&& (dst.toString().equals(IPaddr) || dst.toString().equals(IPaddr2))) {
print= true;
}
if (!print) { // Don't print the packet
if (Trace.isTraceOn() && Trace.isTraceInformationOn()) {
Trace.log(Trace.INFORMATION, "Not printing record");
}
return ""; // Return empty record because it didn't pass the filter
}
}
// Make the protocol a readable string instead of just a number
if (protocol == 0x3a)
nextheaders= ICMPV6;
if (protocol == 0x06)
nextheaders= TCP;
if (protocol == 0x11)
nextheaders= UDP;
if (protocol == 0x00)
nextheaders= EXTHOPHOP;
if (protocol == 0x2b)
nextheaders= EXTROUTE;
if (protocol == 0x2c)
nextheaders= EXTFRAG;
if (protocol == 0x32)
nextheaders= EXTESP;
if (protocol == 0x33)
nextheaders= EXTAH;
if (protocol == 0x3c)
nextheaders= EXTDST;
Object[] args=
{
version,
src,
dst,
hoplimit,
flowlabel,
trafficclass,
payloadlength,
nextheaders,
nextheaderh,
};
String next1= printnext(filter);
if (next1 == "") { // The header didn't pass the filter
return "";
} else {
return Formatter.jsprintf(
"\t "
+ IPV6DATA
+ " . .:"
+ " "
+ VER
+ " : {0,2,R} \t\t "
+ TRAFFICCLASS
+ ": {5} \t\t "
+ FLWLBL
+ ": {4}\n"
+ "\t\t\t "
+ PAYLOADLENGTH
+ ": {6,5,R} \t"
+ NXTHDR
+ ": {8,4,L},{7,10,L} "
+ HOPLIMIT
+ ": {3,3,R}\n"
+ "\t\t\t "
+ SRC
+ ": {1}\n"
+ "\t\t\t "
+ DST
+ ": {2}\n",
args)
+ printHexHeader()
+ next1;
}
}
/**
* Returns the version of this Header.
* @return String containing a decimal representation of the version.
*/
public String getVersion() {
return version.toString();
}
/**
* Returns the traffic class of this Header.
* @return String containing a decimal representation of the traffic class.
*/
public String getTrafficClass() {
return (new Dec(trafficclass.getData())).toString();
}
/**
* Returns the flow label of this Header.
* @return String containing a decimal representation of the flow label.
*/
public String getFlowLabel() {
return (new Dec(flowlabel.getData())).toString();
}
/**
* Returns the payload length of this Header.
* @return String containing a decimal representation of the payload length.
*/
public String getPayloadLength() {
return payloadlength.toString();
}
/**
* Returns the next header identifier.
* @return String containing a decimal representation of the next header identifier.
*/
public String getNextHeaderDec() {
return nextheader.toString();
}
/**
* Returns the hop limit of this Header.
* @return String containing a decimal representation of the hop limit.
*/
public String getHopLimit() {
return hoplimit.toString();
}
/**
* Returns the source IPv6 Address of this Header.
* @return String containing a delimited decimal representation of the source address.
*/
public String getSrcAddr() {
return src.toString();
}
/**
* Returns the destination IPv6 Address of this Header
* @return String containing a delimited decimal representation of the destination address
*/
public String getDstAddr() {
return dst.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy