Class DhcpPacket
java.lang.Object
ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket
- All Implemented Interfaces:
java.util.Comparator<DhcpOption>
public final class DhcpPacket extends java.lang.Object implements java.util.Comparator<DhcpOption>
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DhcpPacket.DhcpPacketOption<T>
Опция, которой оперирует биллинг для поиска агентского устройства, сервиса. -
Field Summary
Fields Modifier and Type Field Description byte[]
chaddr
Client HW address.byte[]
ciaddr
Client IP.static int
DHCP_ACK
Code for DHCPACK Messagestatic int
DHCP_DECLINE
Code for DHCPDECLINE Messagestatic int
DHCP_DISCOVER
Code for DHCPDISCOVER Messagestatic int
DHCP_INFORM
Code for DHCPINFORM Messagestatic int
DHCP_NAK
Code for DHCPNAK Messagestatic int
DHCP_OFFER
Code for DHCPOFFER Messagestatic int
DHCP_RELEASE
Code for DHCPRELEASE Messagestatic int
DHCP_REQUEST
Code for DHCPREQUEST Messagebyte[]
file
Boot file name.static short
FLAG_BROADCAST
Маска для поля flags, устанавливающего способ отправки dhcp-пакета как broadcast (всем).short
flags
Flags.byte[]
giaddr
Relay agent IP.byte
hlen
Hardware address length.byte
hops
Hw options.byte
htype
HW address Type.byte
messageType
Тип DHCP-пакета.byte
op
Op code.static byte
OP_BOOT_REQUEST
Тип DHCP-сообщения - от клиента к серверуstatic byte
OP_BOOT_RESPONSE
Тип DHCP-сообщения - от сервера к клиентуstatic byte
OPTION_AGENT_INFORMATION
DHCP-опция 82.static byte
OPTION_CLIENT_IDENTIDIER
DHCP-опция 61.static byte
OPTION_COOKIE_SERVER
DHCP-опция 8.static byte
OPTION_DOMAIN_NAME
DHCP-опция 15.static byte
OPTION_DOMAIN_NAME_SERVER
DHCP-опция 6.static byte
OPTION_HOST_NAME
DHCP-опция 12.static byte
OPTION_IP_ADDRESS_LEASE_TIME
DHCP-опция 51.static byte
OPTION_LOG_SERVER
DHCP-опция 7.static byte
OPTION_LPR_SERVER
DHCP-опция 9.static byte
OPTION_NAME_SERVER
DHCP-опция 5.static byte
OPTION_PARAMETER_REQUEST_LIST
DHCP-опция 55.static byte
OPTION_REBINDING_TIME_VALUE
DHCP-опция 59.static byte
OPTION_RENEWAL_TIME_VALUE
DHCP-опция 58.static byte
OPTION_REQUESTED_IP_ADDRESS
DHCP-опция 50.static byte
OPTION_ROUTER
DHCP-опция 3.static byte
OPTION_SERVER_IDENTIFIER
DHCP-опция 54.static byte
OPTION_SUBNET_MASK
DHCP-опция 1.static byte
OPTION_TIME_OFFSET
DHCP-опция 2.static byte
OPTION_TIME_SERVER
DHCP-опция 4.short
secs
Elapsed time from trying to boot.byte[]
siaddr
Server IP.byte[]
sname
Optional server host name.int
xid
Transaction id.byte[]
yiaddr
Your client IP.static byte
ZERO
Константа для нулевого значения байта -
Constructor Summary
Constructors Constructor Description DhcpPacket()
Конструктор пустого пакета.DhcpPacket(java.nio.ByteBuffer request)
Конструктор пакета - запроса. -
Method Summary
Modifier and Type Method Description void
clearSubOptions()
Очистка подопций 82й опции.int
compare(DhcpOption o1, DhcpOption o2)
Сравнение опций в зависимости от их "веса"DhcpPacket
createResponse()
Создание ответного dhcp-пакета на dhcp-запрос на основании данных запроса.DhcpOption
getOption(byte code)
<O> O
getOption(DhcpPacket.DhcpPacketOption<O> option)
Получение опции(атрибута) из пакета.<O> O
getOption(DhcpPacket.DhcpPacketOption<O> option, O value)
Получение опции(атрибута) из пакета.DhcpOption
getSubOption(byte code)
boolean
haveSubOptions()
Возвращает наличие Options.82 в запросе.boolean
isClientAddressSet()
Проверка на заполненность поляciaddr
boolean
isFromRelayAgent()
Проверка, пришел ли dhcp-запрос от dhcp-relay агента, ретранслировавшего dhcp-запрос от абонента.static boolean
isNil(byte[] b)
Проверка на незаполненность dhcp-поля, представленного массивом байтов.static boolean
isRenewRequest(DhcpPacket request)
Првоеряет, является ли данный dhcp-запрос renew-запросом.void
serialize(java.nio.ByteBuffer bb)
Сериализация dhcp-пакета в последовательность байт.void
setOption(byte code, byte[] value)
Установка значения dhcp-опции.void
setOption(byte code, java.lang.String stringValue)
void
setOption(DhcpOption option)
Установка значения опции в dhcp-пакет.<O> void
setOption(DhcpPacket.DhcpPacketOption<O> option, O value)
Установка опции в пакет.void
setSubOption(byte code, byte[] value)
void
setSubOption(byte code, java.lang.String stringValue)
void
setSubOption(DhcpOption option)
java.lang.String
toString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.util.Comparator
equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Field Details
-
ZERO
public static final byte ZEROКонстанта для нулевого значения байта- See Also:
- Constant Field Values
-
FLAG_BROADCAST
public static short FLAG_BROADCASTМаска для поля flags, устанавливающего способ отправки dhcp-пакета как broadcast (всем). В противовес unicast - одному. -
OP_BOOT_REQUEST
public static final byte OP_BOOT_REQUESTТип DHCP-сообщения - от клиента к серверу- See Also:
- Constant Field Values
-
OP_BOOT_RESPONSE
public static final byte OP_BOOT_RESPONSEТип DHCP-сообщения - от сервера к клиенту- See Also:
- Constant Field Values
-
DHCP_DISCOVER
public static final int DHCP_DISCOVERCode for DHCPDISCOVER Message- See Also:
- Constant Field Values
-
DHCP_OFFER
public static final int DHCP_OFFERCode for DHCPOFFER Message- See Also:
- Constant Field Values
-
DHCP_REQUEST
public static final int DHCP_REQUESTCode for DHCPREQUEST Message- See Also:
- Constant Field Values
-
DHCP_DECLINE
public static final int DHCP_DECLINECode for DHCPDECLINE Message- See Also:
- Constant Field Values
-
DHCP_ACK
public static final int DHCP_ACKCode for DHCPACK Message- See Also:
- Constant Field Values
-
DHCP_NAK
public static final int DHCP_NAKCode for DHCPNAK Message- See Also:
- Constant Field Values
-
DHCP_RELEASE
public static final int DHCP_RELEASECode for DHCPRELEASE Message- See Also:
- Constant Field Values
-
DHCP_INFORM
public static final int DHCP_INFORMCode for DHCPINFORM Message- See Also:
- Constant Field Values
-
OPTION_SUBNET_MASK
public static final byte OPTION_SUBNET_MASKDHCP-опция 1. Маска подсети, из которой получен адрес. IP-адрес в десятичном формате с точками- See Also:
- Constant Field Values
-
OPTION_TIME_OFFSET
public static final byte OPTION_TIME_OFFSETDHCP-опция 2. Задает разницу во времени (в секундах) в подсети клиента по сравнению с Универсальным скоординированным временем (UTC). 32-разрядное целое число- See Also:
- Constant Field Values
-
OPTION_ROUTER
public static final byte OPTION_ROUTERDHCP-опция 3. Список IP-адресов шлюзов по умолчанию. Один или несколько IP-адресов в десятичном формате с точками- See Also:
- Constant Field Values
-
OPTION_TIME_SERVER
public static final byte OPTION_TIME_SERVERDHCP-опция 4. Список IP-адресов серверов времени. Один или несколько IP-адресов в десятичном формате с точками- See Also:
- Constant Field Values
-
OPTION_NAME_SERVER
public static final byte OPTION_NAME_SERVERDHCP-опция 5. Список IP-адресов серверов имен. Один или несколько IP-адресов в десятичном формате с точками- See Also:
- Constant Field Values
-
OPTION_DOMAIN_NAME_SERVER
public static final byte OPTION_DOMAIN_NAME_SERVERDHCP-опция 6. Список IP-адресов серверов DNS. Один или несколько IP-адресов в десятичном формате с точками- See Also:
- Constant Field Values
-
OPTION_LOG_SERVER
public static final byte OPTION_LOG_SERVERDHCP-опция 7. Список IP-адресов серверов протоколов. Один или несколько IP-адресов в десятичном формате с точками- See Also:
- Constant Field Values
-
OPTION_COOKIE_SERVER
public static final byte OPTION_COOKIE_SERVERDHCP-опция 8. Список IP-адресов серверов cookie. Один или несколько IP-адресов в десятичном формате с точками- See Also:
- Constant Field Values
-
OPTION_LPR_SERVER
public static final byte OPTION_LPR_SERVERDHCP-опция 9. Список IP-адресов серверов LPR. Один или несколько IP-адресов в десятичном формате с точками- See Also:
- Constant Field Values
-
OPTION_HOST_NAME
public static final byte OPTION_HOST_NAMEDHCP-опция 12. Имя хоста клиента. Строка ASCII- See Also:
- Constant Field Values
-
OPTION_DOMAIN_NAME
public static final byte OPTION_DOMAIN_NAMEDHCP-опция 15. Имя домена DNS по умолчанию. Строка ASCII- See Also:
- Constant Field Values
-
OPTION_REQUESTED_IP_ADDRESS
public static final byte OPTION_REQUESTED_IP_ADDRESSDHCP-опция 50. IP-адрес, запрашиваемый клиентом- See Also:
- Constant Field Values
-
OPTION_IP_ADDRESS_LEASE_TIME
public static final byte OPTION_IP_ADDRESS_LEASE_TIMEDHCP-опция 51. Время выделения для возвращаемого адреса. По умолчанию сервер DHCP использует ключевое слово leasetimedefault, однако непосредственное задание опции 51 переопределяет его. 32-разрядное целое число без знака- See Also:
- Constant Field Values
-
OPTION_SERVER_IDENTIFIER
public static final byte OPTION_SERVER_IDENTIFIERDHCP-опция 54. Используются сервером DHCP или клиентом для указания адреса сервера или сервера, на который направляется сообщение.- See Also:
- Constant Field Values
-
OPTION_RENEWAL_TIME_VALUE
public static final byte OPTION_RENEWAL_TIME_VALUEDHCP-опция 58. Интервал времени (в секундах), в течение которого клиент должен отправить запрос на обновление. 32-разрядное целое число без знака- See Also:
- Constant Field Values
-
OPTION_REBINDING_TIME_VALUE
public static final byte OPTION_REBINDING_TIME_VALUEDHCP-опция 59. Интервал времени (в секундах), в течение которого клиент должен отправить запрос на повторное связывание. 32-разрядное целое число без знака- See Also:
- Constant Field Values
-
OPTION_PARAMETER_REQUEST_LIST
public static final byte OPTION_PARAMETER_REQUEST_LISTDHCP-опция 55. Используется клиентом DHCP для указания требуемых параметров, которые бы он хотел получить от сервера. Сервер может не поддерживать все требуемые клиентом поля и будет возвращать только те, которые ему доступны. В опции фигурирует N байтов, каждый из которых является ссылкой на соответствующую DHCP-опцию. При формировании DHCP-ответа значение опции OPTION_PARAMETER_REQUEST_LIST из DHCP-запроса используется для упорядочивания опций при сериализации.- See Also:
- Constant Field Values
-
OPTION_CLIENT_IDENTIDIER
public static final byte OPTION_CLIENT_IDENTIDIERDHCP-опция 61. Используется для однозначной идентификации клиента DHCP- See Also:
- Constant Field Values
-
OPTION_AGENT_INFORMATION
public static final byte OPTION_AGENT_INFORMATIONDHCP-опция 82. Используется для того чтобы проинформировать DHCP-сервер о том, от какого DHCP-ретранслятора (DHCP-relay) и через какой его порт был получен запрос- See Also:
- Constant Field Values
-
op
public byte opOp code. Тип сообщения. Может принимать значения: BOOTREQUEST (0x01, запрос от клиента к серверу) и BOOTREPLY (0x02, ответ от сервера к клиенту). Размер поля - 1 байт. -
htype
public byte htypeHW address Type. Тип аппаратного адреса. Допустимые значения этого поля определены в RFC 1700 «Assigned Numbers». Например, для MAC-адреса Ethernet это поле принимает значение 0x01. Размер поля - 1 байт. -
hlen
public byte hlenHardware address length. Длина аппаратного адреса в байтах. Для MAC-адреса Ethernet — 0x06. Размер поля - 1 байт -
hops
public byte hopsHw options. Количество промежуточных маршрутизаторов (так называемых агентов ретрансляции DHCP), через которые прошло сообщение. Клиент устанавливает это поле в 0x00. Размер поля - 1 байт -
xid
public int xidTransaction id. Уникальный идентификатор транзакции, генерируемый клиентом в начале процесса получения адреса. Размер поля - 4 байта -
secs
public short secsElapsed time from trying to boot. Время в секундах с момента начала процесса получения адреса. Может не использоваться (в этом случае оно устанавливается в 0x0000). Размер поля - 2 байта -
flags
public short flagsFlags. Поле для флагов — специальных параметров протокола DHCP. Размер поля - 2 байта. -
ciaddr
public byte[] ciaddrClient IP. IP-адрес клиента. Заполняется только в том случае, если клиент уже имеет собственный IP-адрес и способен отвечать на запросы ARP (это возможно, если клиент выполняет процедуру обновления адреса по истечении срока аренды). Размер поля - 4 байта. -
yiaddr
public byte[] yiaddrYour client IP. Новый IP-адрес клиента, предложенный сервером. Размер поля - 4 байта. -
siaddr
public byte[] siaddrServer IP. IP-адрес сервера. Возвращается в предложении DHCP (DHCP-OFFER). Размер поля - 4 байта -
giaddr
public byte[] giaddrRelay agent IP. IP-адрес агента ретрансляции, если таковой участвовал в процессе доставки сообщения DHCP до сервера. Размер поля - 4 байта. -
chaddr
public byte[] chaddrClient HW address. Аппаратный адрес (обычно MAC-адрес) клиента. Размер поля - 16 байт. -
sname
public byte[] snameOptional server host name. Необязательное имя сервера в виде нуль-терминированной строки. Размер поля - 64 байта -
file
public byte[] fileBoot file name. Необязательное имя файла на сервере, используемое бездисковыми рабочими станциями при удалённой загрузке. Как иsname
, представлено в виде нуль-терминированной строки. Размер поля - 128 байт. -
messageType
public byte messageTypeТип DHCP-пакета. Размер поля - 1 байт. Возможные значения:
-
-
Constructor Details
-
DhcpPacket
public DhcpPacket()Конструктор пустого пакета. -
DhcpPacket
public DhcpPacket(java.nio.ByteBuffer request)Конструктор пакета - запроса.- Parameters:
request
- содержимое запроса в виде набора байтов
-
-
Method Details
-
createResponse
Создание ответного dhcp-пакета на dhcp-запрос на основании данных запроса.- Returns:
- dhcp-ответ с установленным полем op=
OP_BOOT_RESPONSE
-
haveSubOptions
public boolean haveSubOptions()Возвращает наличие Options.82 в запросе.- Returns:
- true - в dhcp-запросе присутствует 82я опция.
-
clearSubOptions
public void clearSubOptions()Очистка подопций 82й опции. -
serialize
public void serialize(java.nio.ByteBuffer bb)Сериализация dhcp-пакета в последовательность байт.- Parameters:
bb
- набор байтов, куда сериализуется пакет
-
isFromRelayAgent
public final boolean isFromRelayAgent()Проверка, пришел ли dhcp-запрос от dhcp-relay агента, ретранслировавшего dhcp-запрос от абонента. Анализируется заполненность поляgiaddr
- Returns:
- true - запрос пришел от dhcp-relay, false - не от dhcp-relay.
-
isClientAddressSet
public final boolean isClientAddressSet()Проверка на заполненность поляciaddr
- Returns:
-
compare
Сравнение опций в зависимости от их "веса"- Specified by:
compare
in interfacejava.util.Comparator<DhcpOption>
- Parameters:
o1
-o2
-- Returns:
-
setOption
Установка значения опции в dhcp-пакет.- Parameters:
option
- устанавливаемая опция
-
setOption
public final void setOption(byte code, byte[] value)Установка значения dhcp-опции. Опция задается кодом- Parameters:
code
-value
-
-
setOption
public final void setOption(byte code, java.lang.String stringValue) -
getOption
-
setSubOption
-
setSubOption
public final void setSubOption(byte code, byte[] value) -
setSubOption
public final void setSubOption(byte code, java.lang.String stringValue) -
getSubOption
-
toString
public java.lang.String toString()- Overrides:
toString
in classjava.lang.Object
-
getOption
Получение опции(атрибута) из пакета. Если такая опция не была установлена - метод вернет null.- Parameters:
option
- идентификатор опции, которая была установлена в обработчике протокола- Returns:
- значение опции.
-
getOption
Получение опции(атрибута) из пакета. Если такая опция не была установлена - метод вернет value.- Parameters:
option
- идентификатор опции, значение которой нужно получить.value
- - значение по умолчанию- Returns:
- значение опции
-
setOption
Установка опции в пакет.- Parameters:
option
- идентификатор устанавливаемой опцииvalue
- устанавливаемое значение.
-
isNil
public static final boolean isNil(byte[] b)Проверка на незаполненность dhcp-поля, представленного массивом байтов. Если хотя бы один байт массива не нулевой, то это значит, что поле имеет значение.- Parameters:
b
- поле в виде массива байтов- Returns:
- true - поле не имеет значение и заполнено нулями, false - в поле записано какое-то ненулевое значение.
-
isRenewRequest
Првоеряет, является ли данный dhcp-запрос renew-запросом. Запрос является RENEW, если пакет REQUEST, ciaddr!=0.0.0.0, а опции Server-Identifier и Requested-IP-Address отсутствуют.- Parameters:
request
- проверяемый dhcp-запрос- Returns:
- true - запрос является renew-запросом, false - не renew-запрос.
-