initial commit
This commit is contained in:
commit
e189168144
@ -0,0 +1,118 @@
|
|||||||
|
unset shellHook
|
||||||
|
PATH=${PATH:-}
|
||||||
|
nix_saved_PATH="$PATH"
|
||||||
|
XDG_DATA_DIRS=${XDG_DATA_DIRS:-}
|
||||||
|
nix_saved_XDG_DATA_DIRS="$XDG_DATA_DIRS"
|
||||||
|
BASH='/noshell'
|
||||||
|
HOSTTYPE='x86_64'
|
||||||
|
IFS='
|
||||||
|
'
|
||||||
|
IN_NIX_SHELL='impure'
|
||||||
|
export IN_NIX_SHELL
|
||||||
|
LINENO='76'
|
||||||
|
MACHTYPE='x86_64-pc-linux-gnu'
|
||||||
|
NIX_BUILD_CORES='0'
|
||||||
|
export NIX_BUILD_CORES
|
||||||
|
NIX_STORE='/nix/store'
|
||||||
|
export NIX_STORE
|
||||||
|
OLDPWD=''
|
||||||
|
export OLDPWD
|
||||||
|
OPTERR='1'
|
||||||
|
OSTYPE='linux-gnu'
|
||||||
|
PATH='/path-not-set'
|
||||||
|
export PATH
|
||||||
|
PS4='+ '
|
||||||
|
builder='/nix/store/kbcrs84s1x8yd5bp1nq6q6ihda8nd2lp-bash-interactive-5.2-p15/bin/bash'
|
||||||
|
export builder
|
||||||
|
dontAddDisableDepTrack='1'
|
||||||
|
export dontAddDisableDepTrack
|
||||||
|
name='devenv-shell'
|
||||||
|
export name
|
||||||
|
out='/home/patrick/Sandbox/dhcp/outputs/out'
|
||||||
|
export out
|
||||||
|
outputs='out'
|
||||||
|
shellHook='
|
||||||
|
# Remove all the unnecessary noise that is set by the build env
|
||||||
|
unset NIX_BUILD_TOP NIX_BUILD_CORES NIX_STORE
|
||||||
|
unset TEMP TEMPDIR TMP TMPDIR
|
||||||
|
# $name variable is preserved to keep it compatible with pure shell https://github.com/sindresorhus/pure/blob/47c0c881f0e7cfdb5eaccd335f52ad17b897c060/pure.zsh#L235
|
||||||
|
unset builder out shellHook stdenv system
|
||||||
|
# Flakes stuff
|
||||||
|
unset dontAddDisableDepTrack outputs
|
||||||
|
|
||||||
|
# For `nix develop`. We get /noshell on Linux and /sbin/nologin on macOS.
|
||||||
|
if [[ "$SHELL" == "/noshell" || "$SHELL" == "/sbin/nologin" ]]; then
|
||||||
|
export SHELL=/nix/store/kbcrs84s1x8yd5bp1nq6q6ihda8nd2lp-bash-interactive-5.2-p15/bin/bash
|
||||||
|
fi
|
||||||
|
|
||||||
|
# https://github.com/numtide/devshell/issues/158
|
||||||
|
PATH=${PATH#/path-not-set:}
|
||||||
|
|
||||||
|
export DEVENV_PROFILE=/nix/store/93qx8jlgc6hpcqr3jcsr7by6lzipah3g-devenv-profile
|
||||||
|
|
||||||
|
# add installed packages to PATH
|
||||||
|
export PATH="$DEVENV_PROFILE/bin:$PATH"
|
||||||
|
|
||||||
|
# prepend common compilation lookup paths
|
||||||
|
export PKG_CONFIG_PATH="$DEVENV_PROFILE/lib/pkgconfig:${PKG_CONFIG_PATH-}"
|
||||||
|
export LD_LIBRARY_PATH="$DEVENV_PROFILE/lib:${LD_LIBRARY_PATH-}"
|
||||||
|
export LIBRARY_PATH="$DEVENV_PROFILE/lib:${LIBRARY_PATH-}"
|
||||||
|
export C_INCLUDE_PATH="$DEVENV_PROFILE/include:${C_INCLUDE_PATH-}"
|
||||||
|
|
||||||
|
# these provide shell completions / default config options
|
||||||
|
export XDG_DATA_DIRS="$DEVENV_PROFILE/share:${XDG_DATA_DIRS-}"
|
||||||
|
export XDG_CONFIG_DIRS="$DEVENV_PROFILE/etc/xdg:${XDG_CONFIG_DIRS-}"
|
||||||
|
|
||||||
|
export DEVENV_DOTFILE='\''/home/patrick/Sandbox/dhcp/.devenv'\''
|
||||||
|
export DEVENV_PROFILE='\''/nix/store/93qx8jlgc6hpcqr3jcsr7by6lzipah3g-devenv-profile'\''
|
||||||
|
export DEVENV_ROOT='\''/home/patrick/Sandbox/dhcp'\''
|
||||||
|
export DEVENV_STATE='\''/home/patrick/Sandbox/dhcp/.devenv/state'\''
|
||||||
|
export GREET='\''devenv'\''
|
||||||
|
|
||||||
|
|
||||||
|
hello
|
||||||
|
git --version
|
||||||
|
|
||||||
|
export PS1="\[\e[0;34m\](devenv)\[\e[0m\] ${PS1-}"
|
||||||
|
|
||||||
|
# set path to locales on non-NixOS Linux hosts
|
||||||
|
if [ -z "${LOCALE_ARCHIVE-}" ]; then
|
||||||
|
export LOCALE_ARCHIVE=/nix/store/nm00g2nm2wsyh30jvkgi168kh6yvw4sl-glibc-locales-2.37-8/lib/locale/locale-archive
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# note what environments are active, but make sure we don'\''t repeat them
|
||||||
|
if [[ ! "${DIRENV_ACTIVE-}" =~ (^|:)"$PWD"(:|$) ]]; then
|
||||||
|
export DIRENV_ACTIVE="$PWD:${DIRENV_ACTIVE-}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# devenv helper
|
||||||
|
if [ ! type -p direnv &>/dev/null && -f .envrc ]; then
|
||||||
|
echo "You have .envrc but direnv command is not installed."
|
||||||
|
echo "Please install direnv: https://direnv.net/docs/installation.html"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p .devenv
|
||||||
|
rm -f .devenv/profile
|
||||||
|
ln -s /nix/store/93qx8jlgc6hpcqr3jcsr7by6lzipah3g-devenv-profile .devenv/profile
|
||||||
|
|
||||||
|
'
|
||||||
|
export shellHook
|
||||||
|
stdenv='/nix/store/fi1k3vh3a70g8cpwmrnc553vvccrny54-naked-stdenv'
|
||||||
|
export stdenv
|
||||||
|
system='x86_64-linux'
|
||||||
|
export system
|
||||||
|
runHook ()
|
||||||
|
{
|
||||||
|
|
||||||
|
eval "$shellHook";
|
||||||
|
unset runHook
|
||||||
|
}
|
||||||
|
PATH="$PATH:$nix_saved_PATH"
|
||||||
|
XDG_DATA_DIRS="$XDG_DATA_DIRS:$nix_saved_XDG_DATA_DIRS"
|
||||||
|
export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)"
|
||||||
|
export TMP="$NIX_BUILD_TOP"
|
||||||
|
export TMPDIR="$NIX_BUILD_TOP"
|
||||||
|
export TEMP="$NIX_BUILD_TOP"
|
||||||
|
export TEMPDIR="$NIX_BUILD_TOP"
|
||||||
|
eval "$shellHook"
|
@ -0,0 +1,115 @@
|
|||||||
|
unset shellHook
|
||||||
|
PATH=${PATH:-}
|
||||||
|
nix_saved_PATH="$PATH"
|
||||||
|
XDG_DATA_DIRS=${XDG_DATA_DIRS:-}
|
||||||
|
nix_saved_XDG_DATA_DIRS="$XDG_DATA_DIRS"
|
||||||
|
BASH='/noshell'
|
||||||
|
HOSTTYPE='x86_64'
|
||||||
|
IFS='
|
||||||
|
'
|
||||||
|
IN_NIX_SHELL='impure'
|
||||||
|
export IN_NIX_SHELL
|
||||||
|
LINENO='76'
|
||||||
|
MACHTYPE='x86_64-pc-linux-gnu'
|
||||||
|
NIX_BUILD_CORES='0'
|
||||||
|
export NIX_BUILD_CORES
|
||||||
|
NIX_STORE='/nix/store'
|
||||||
|
export NIX_STORE
|
||||||
|
OLDPWD=''
|
||||||
|
export OLDPWD
|
||||||
|
OPTERR='1'
|
||||||
|
OSTYPE='linux-gnu'
|
||||||
|
PATH='/path-not-set'
|
||||||
|
export PATH
|
||||||
|
PS4='+ '
|
||||||
|
builder='/nix/store/kbcrs84s1x8yd5bp1nq6q6ihda8nd2lp-bash-interactive-5.2-p15/bin/bash'
|
||||||
|
export builder
|
||||||
|
dontAddDisableDepTrack='1'
|
||||||
|
export dontAddDisableDepTrack
|
||||||
|
name='devenv-shell'
|
||||||
|
export name
|
||||||
|
out='/home/patrick/Sandbox/dhcp/outputs/out'
|
||||||
|
export out
|
||||||
|
outputs='out'
|
||||||
|
shellHook='
|
||||||
|
# Remove all the unnecessary noise that is set by the build env
|
||||||
|
unset NIX_BUILD_TOP NIX_BUILD_CORES NIX_STORE
|
||||||
|
unset TEMP TEMPDIR TMP TMPDIR
|
||||||
|
# $name variable is preserved to keep it compatible with pure shell https://github.com/sindresorhus/pure/blob/47c0c881f0e7cfdb5eaccd335f52ad17b897c060/pure.zsh#L235
|
||||||
|
unset builder out shellHook stdenv system
|
||||||
|
# Flakes stuff
|
||||||
|
unset dontAddDisableDepTrack outputs
|
||||||
|
|
||||||
|
# For `nix develop`. We get /noshell on Linux and /sbin/nologin on macOS.
|
||||||
|
if [[ "$SHELL" == "/noshell" || "$SHELL" == "/sbin/nologin" ]]; then
|
||||||
|
export SHELL=/nix/store/kbcrs84s1x8yd5bp1nq6q6ihda8nd2lp-bash-interactive-5.2-p15/bin/bash
|
||||||
|
fi
|
||||||
|
|
||||||
|
# https://github.com/numtide/devshell/issues/158
|
||||||
|
PATH=${PATH#/path-not-set:}
|
||||||
|
|
||||||
|
export DEVENV_PROFILE=/nix/store/fd3xw4ffw33w8c70nw5d768ss3sxg211-devenv-profile
|
||||||
|
|
||||||
|
# add installed packages to PATH
|
||||||
|
export PATH="$DEVENV_PROFILE/bin:$PATH"
|
||||||
|
|
||||||
|
# prepend common compilation lookup paths
|
||||||
|
export PKG_CONFIG_PATH="$DEVENV_PROFILE/lib/pkgconfig:${PKG_CONFIG_PATH-}"
|
||||||
|
export LD_LIBRARY_PATH="$DEVENV_PROFILE/lib:${LD_LIBRARY_PATH-}"
|
||||||
|
export LIBRARY_PATH="$DEVENV_PROFILE/lib:${LIBRARY_PATH-}"
|
||||||
|
export C_INCLUDE_PATH="$DEVENV_PROFILE/include:${C_INCLUDE_PATH-}"
|
||||||
|
|
||||||
|
# these provide shell completions / default config options
|
||||||
|
export XDG_DATA_DIRS="$DEVENV_PROFILE/share:${XDG_DATA_DIRS-}"
|
||||||
|
export XDG_CONFIG_DIRS="$DEVENV_PROFILE/etc/xdg:${XDG_CONFIG_DIRS-}"
|
||||||
|
|
||||||
|
export DEVENV_DOTFILE='\''/home/patrick/Sandbox/dhcp/.devenv'\''
|
||||||
|
export DEVENV_PROFILE='\''/nix/store/fd3xw4ffw33w8c70nw5d768ss3sxg211-devenv-profile'\''
|
||||||
|
export DEVENV_ROOT='\''/home/patrick/Sandbox/dhcp'\''
|
||||||
|
export DEVENV_STATE='\''/home/patrick/Sandbox/dhcp/.devenv/state'\''
|
||||||
|
export RUST_SRC_PATH='\''/nix/store/8n69a7ralcwkzfxhzm9va5nlj5risdz6-rust-src-stable-2023-04-20/lib/rustlib/src/rust/library'\''
|
||||||
|
|
||||||
|
|
||||||
|
export PS1="\[\e[0;34m\](devenv)\[\e[0m\] ${PS1-}"
|
||||||
|
|
||||||
|
# set path to locales on non-NixOS Linux hosts
|
||||||
|
if [ -z "${LOCALE_ARCHIVE-}" ]; then
|
||||||
|
export LOCALE_ARCHIVE=/nix/store/nm00g2nm2wsyh30jvkgi168kh6yvw4sl-glibc-locales-2.37-8/lib/locale/locale-archive
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# note what environments are active, but make sure we don'\''t repeat them
|
||||||
|
if [[ ! "${DIRENV_ACTIVE-}" =~ (^|:)"$PWD"(:|$) ]]; then
|
||||||
|
export DIRENV_ACTIVE="$PWD:${DIRENV_ACTIVE-}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# devenv helper
|
||||||
|
if [ ! type -p direnv &>/dev/null && -f .envrc ]; then
|
||||||
|
echo "You have .envrc but direnv command is not installed."
|
||||||
|
echo "Please install direnv: https://direnv.net/docs/installation.html"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p .devenv
|
||||||
|
rm -f .devenv/profile
|
||||||
|
ln -s /nix/store/fd3xw4ffw33w8c70nw5d768ss3sxg211-devenv-profile .devenv/profile
|
||||||
|
|
||||||
|
'
|
||||||
|
export shellHook
|
||||||
|
stdenv='/nix/store/fi1k3vh3a70g8cpwmrnc553vvccrny54-naked-stdenv'
|
||||||
|
export stdenv
|
||||||
|
system='x86_64-linux'
|
||||||
|
export system
|
||||||
|
runHook ()
|
||||||
|
{
|
||||||
|
|
||||||
|
eval "$shellHook";
|
||||||
|
unset runHook
|
||||||
|
}
|
||||||
|
PATH="$PATH:$nix_saved_PATH"
|
||||||
|
XDG_DATA_DIRS="$XDG_DATA_DIRS:$nix_saved_XDG_DATA_DIRS"
|
||||||
|
export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)"
|
||||||
|
export TMP="$NIX_BUILD_TOP"
|
||||||
|
export TMPDIR="$NIX_BUILD_TOP"
|
||||||
|
export TEMP="$NIX_BUILD_TOP"
|
||||||
|
export TEMPDIR="$NIX_BUILD_TOP"
|
||||||
|
eval "$shellHook"
|
@ -0,0 +1,115 @@
|
|||||||
|
unset shellHook
|
||||||
|
PATH=${PATH:-}
|
||||||
|
nix_saved_PATH="$PATH"
|
||||||
|
XDG_DATA_DIRS=${XDG_DATA_DIRS:-}
|
||||||
|
nix_saved_XDG_DATA_DIRS="$XDG_DATA_DIRS"
|
||||||
|
BASH='/noshell'
|
||||||
|
HOSTTYPE='x86_64'
|
||||||
|
IFS='
|
||||||
|
'
|
||||||
|
IN_NIX_SHELL='impure'
|
||||||
|
export IN_NIX_SHELL
|
||||||
|
LINENO='76'
|
||||||
|
MACHTYPE='x86_64-pc-linux-gnu'
|
||||||
|
NIX_BUILD_CORES='0'
|
||||||
|
export NIX_BUILD_CORES
|
||||||
|
NIX_STORE='/nix/store'
|
||||||
|
export NIX_STORE
|
||||||
|
OLDPWD=''
|
||||||
|
export OLDPWD
|
||||||
|
OPTERR='1'
|
||||||
|
OSTYPE='linux-gnu'
|
||||||
|
PATH='/path-not-set'
|
||||||
|
export PATH
|
||||||
|
PS4='+ '
|
||||||
|
builder='/nix/store/kbcrs84s1x8yd5bp1nq6q6ihda8nd2lp-bash-interactive-5.2-p15/bin/bash'
|
||||||
|
export builder
|
||||||
|
dontAddDisableDepTrack='1'
|
||||||
|
export dontAddDisableDepTrack
|
||||||
|
name='devenv-shell'
|
||||||
|
export name
|
||||||
|
out='/home/patrick/Sandbox/dhcp/outputs/out'
|
||||||
|
export out
|
||||||
|
outputs='out'
|
||||||
|
shellHook='
|
||||||
|
# Remove all the unnecessary noise that is set by the build env
|
||||||
|
unset NIX_BUILD_TOP NIX_BUILD_CORES NIX_STORE
|
||||||
|
unset TEMP TEMPDIR TMP TMPDIR
|
||||||
|
# $name variable is preserved to keep it compatible with pure shell https://github.com/sindresorhus/pure/blob/47c0c881f0e7cfdb5eaccd335f52ad17b897c060/pure.zsh#L235
|
||||||
|
unset builder out shellHook stdenv system
|
||||||
|
# Flakes stuff
|
||||||
|
unset dontAddDisableDepTrack outputs
|
||||||
|
|
||||||
|
# For `nix develop`. We get /noshell on Linux and /sbin/nologin on macOS.
|
||||||
|
if [[ "$SHELL" == "/noshell" || "$SHELL" == "/sbin/nologin" ]]; then
|
||||||
|
export SHELL=/nix/store/kbcrs84s1x8yd5bp1nq6q6ihda8nd2lp-bash-interactive-5.2-p15/bin/bash
|
||||||
|
fi
|
||||||
|
|
||||||
|
# https://github.com/numtide/devshell/issues/158
|
||||||
|
PATH=${PATH#/path-not-set:}
|
||||||
|
|
||||||
|
export DEVENV_PROFILE=/nix/store/fd3xw4ffw33w8c70nw5d768ss3sxg211-devenv-profile
|
||||||
|
|
||||||
|
# add installed packages to PATH
|
||||||
|
export PATH="$DEVENV_PROFILE/bin:$PATH"
|
||||||
|
|
||||||
|
# prepend common compilation lookup paths
|
||||||
|
export PKG_CONFIG_PATH="$DEVENV_PROFILE/lib/pkgconfig:${PKG_CONFIG_PATH-}"
|
||||||
|
export LD_LIBRARY_PATH="$DEVENV_PROFILE/lib:${LD_LIBRARY_PATH-}"
|
||||||
|
export LIBRARY_PATH="$DEVENV_PROFILE/lib:${LIBRARY_PATH-}"
|
||||||
|
export C_INCLUDE_PATH="$DEVENV_PROFILE/include:${C_INCLUDE_PATH-}"
|
||||||
|
|
||||||
|
# these provide shell completions / default config options
|
||||||
|
export XDG_DATA_DIRS="$DEVENV_PROFILE/share:${XDG_DATA_DIRS-}"
|
||||||
|
export XDG_CONFIG_DIRS="$DEVENV_PROFILE/etc/xdg:${XDG_CONFIG_DIRS-}"
|
||||||
|
|
||||||
|
export DEVENV_DOTFILE='\''/home/patrick/Sandbox/dhcp/.devenv'\''
|
||||||
|
export DEVENV_PROFILE='\''/nix/store/fd3xw4ffw33w8c70nw5d768ss3sxg211-devenv-profile'\''
|
||||||
|
export DEVENV_ROOT='\''/home/patrick/Sandbox/dhcp'\''
|
||||||
|
export DEVENV_STATE='\''/home/patrick/Sandbox/dhcp/.devenv/state'\''
|
||||||
|
export RUST_SRC_PATH='\''/nix/store/8n69a7ralcwkzfxhzm9va5nlj5risdz6-rust-src-stable-2023-04-20/lib/rustlib/src/rust/library'\''
|
||||||
|
|
||||||
|
|
||||||
|
export PS1="\[\e[0;34m\](devenv)\[\e[0m\] ${PS1-}"
|
||||||
|
|
||||||
|
# set path to locales on non-NixOS Linux hosts
|
||||||
|
if [ -z "${LOCALE_ARCHIVE-}" ]; then
|
||||||
|
export LOCALE_ARCHIVE=/nix/store/nm00g2nm2wsyh30jvkgi168kh6yvw4sl-glibc-locales-2.37-8/lib/locale/locale-archive
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# note what environments are active, but make sure we don'\''t repeat them
|
||||||
|
if [[ ! "${DIRENV_ACTIVE-}" =~ (^|:)"$PWD"(:|$) ]]; then
|
||||||
|
export DIRENV_ACTIVE="$PWD:${DIRENV_ACTIVE-}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# devenv helper
|
||||||
|
if [ ! type -p direnv &>/dev/null && -f .envrc ]; then
|
||||||
|
echo "You have .envrc but direnv command is not installed."
|
||||||
|
echo "Please install direnv: https://direnv.net/docs/installation.html"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p .devenv
|
||||||
|
rm -f .devenv/profile
|
||||||
|
ln -s /nix/store/fd3xw4ffw33w8c70nw5d768ss3sxg211-devenv-profile .devenv/profile
|
||||||
|
|
||||||
|
'
|
||||||
|
export shellHook
|
||||||
|
stdenv='/nix/store/fi1k3vh3a70g8cpwmrnc553vvccrny54-naked-stdenv'
|
||||||
|
export stdenv
|
||||||
|
system='x86_64-linux'
|
||||||
|
export system
|
||||||
|
runHook ()
|
||||||
|
{
|
||||||
|
|
||||||
|
eval "$shellHook";
|
||||||
|
unset runHook
|
||||||
|
}
|
||||||
|
PATH="$PATH:$nix_saved_PATH"
|
||||||
|
XDG_DATA_DIRS="$XDG_DATA_DIRS:$nix_saved_XDG_DATA_DIRS"
|
||||||
|
export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)"
|
||||||
|
export TMP="$NIX_BUILD_TOP"
|
||||||
|
export TMPDIR="$NIX_BUILD_TOP"
|
||||||
|
export TEMP="$NIX_BUILD_TOP"
|
||||||
|
export TEMPDIR="$NIX_BUILD_TOP"
|
||||||
|
eval "$shellHook"
|
3
.envrc
Normal file
3
.envrc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
source_url "https://raw.githubusercontent.com/cachix/devenv/d1f7b48e35e6dee421cfd0f51481d17f77586997/direnvrc" "sha256-YBzqskFZxmNb3kYVoKD9ZixoPXJh1C9ZvTLGFRkauZ0="
|
||||||
|
|
||||||
|
use devenv
|
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
/target
|
||||||
|
/Cargo.lock
|
||||||
|
|
||||||
|
# Devenv
|
||||||
|
.devenv*
|
||||||
|
devenv.local.nix
|
||||||
|
|
10
Cargo.toml
Normal file
10
Cargo.toml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "dhcp"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies.nom]
|
||||||
|
version = "7"
|
||||||
|
default-features = false
|
177
devenv.lock
Normal file
177
devenv.lock
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"devenv": {
|
||||||
|
"locked": {
|
||||||
|
"dir": "src/modules",
|
||||||
|
"lastModified": 1684536222,
|
||||||
|
"narHash": "sha256-jbcTwWLSNZQPmf8+PKtw+3RgwMxbSarMlerIH8feGdw=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "devenv",
|
||||||
|
"rev": "2f1d49aeee1378c44293ca2f61bf3a9004986fb7",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"dir": "src/modules",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "devenv",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fenix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"rust-analyzer-src": "rust-analyzer-src"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684736520,
|
||||||
|
"narHash": "sha256-8WjS3Mmr4DPBsSV2iPkYmxr0/YPpkhX10qT/0YybSsc=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "fenix",
|
||||||
|
"rev": "f435c0d000726dc5ccfabde567443c2495957706",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "fenix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1673956053,
|
||||||
|
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667395993,
|
||||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gitignore": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"pre-commit-hooks",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1660459072,
|
||||||
|
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684668519,
|
||||||
|
"narHash": "sha256-KkVvlXTqdLLwko9Y0p1Xv6KQ9QTcQorrU098cGilb7c=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "85340996ba67cc02f01ba324e18b1306892ed6f5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-stable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1678872516,
|
||||||
|
"narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "9b8e5abb18324c7fe9f07cb100c3cd4a29cda8b8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-22.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pre-commit-hooks": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"gitignore": "gitignore",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684195081,
|
||||||
|
"narHash": "sha256-IKnQUSBhQTChFERxW2AzuauVpY1HRgeVzAjNMAA4B6I=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"rev": "96eabec58248ed8f4b0ad59e7ce9398018684fdc",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"devenv": "devenv",
|
||||||
|
"fenix": "fenix",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"pre-commit-hooks": "pre-commit-hooks"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-analyzer-src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684672829,
|
||||||
|
"narHash": "sha256-xDUpgRcACQQREemfVQnft6AImqF2+dbxmHupw6gzSho=",
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"rev": "7ac161ce77dfa31dc39337c2543a1d777e70c16e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"ref": "nightly",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
8
devenv.nix
Normal file
8
devenv.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
languages.rust = {
|
||||||
|
enable = true;
|
||||||
|
version = "stable";
|
||||||
|
};
|
||||||
|
}
|
8
devenv.yaml
Normal file
8
devenv.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
inputs:
|
||||||
|
nixpkgs:
|
||||||
|
url: github:NixOS/nixpkgs/nixpkgs-unstable
|
||||||
|
fenix:
|
||||||
|
url: github:nix-community/fenix
|
||||||
|
inputs:
|
||||||
|
nixpkgs:
|
||||||
|
follows: nixpkgs
|
BIN
dhcp_discover.bin
Normal file
BIN
dhcp_discover.bin
Normal file
Binary file not shown.
120
src/lib.rs
Normal file
120
src/lib.rs
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
use std::{net::Ipv4Addr, path::Path};
|
||||||
|
|
||||||
|
use nom::{
|
||||||
|
bytes::complete::take,
|
||||||
|
number::complete::{be_u16, be_u32, be_u8},
|
||||||
|
IResult,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct DhcpMessage<'a> {
|
||||||
|
operation: Operation,
|
||||||
|
hardware_type: HardwareType,
|
||||||
|
hardware_address_length: u8,
|
||||||
|
hops: u8,
|
||||||
|
transaction_id: u32,
|
||||||
|
seconds: u16,
|
||||||
|
flags: u16,
|
||||||
|
client_address: Ipv4Addr,
|
||||||
|
server_address: Ipv4Addr,
|
||||||
|
gateway_address: Ipv4Addr,
|
||||||
|
client_hardware_address: &'a [u8],
|
||||||
|
server_hostname: &'a str,
|
||||||
|
boot_file_name: &'a Path,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum Operation {
|
||||||
|
Request = 1,
|
||||||
|
Reply = 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<u8> for Operation {
|
||||||
|
fn from(value: u8) -> Self {
|
||||||
|
match value {
|
||||||
|
1 => Operation::Request,
|
||||||
|
2 => Operation::Reply,
|
||||||
|
_ => todo!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum HardwareType {
|
||||||
|
Reserved(u8),
|
||||||
|
Unassigned(u8),
|
||||||
|
Ethernet,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<u8> for HardwareType {
|
||||||
|
fn from(value: u8) -> Self {
|
||||||
|
use HardwareType::*;
|
||||||
|
match value {
|
||||||
|
a @ 0 => Reserved(a),
|
||||||
|
1 => Ethernet,
|
||||||
|
v => Unassigned(v),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_dhcp_operation(i: &[u8]) -> IResult<&[u8], Operation> {
|
||||||
|
be_u8(i).map(|(i, v)| (i, v.into()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_dhcp_hardware_type(i: &[u8]) -> IResult<&[u8], HardwareType> {
|
||||||
|
be_u8(i).map(|(i, v)| (i, v.into()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_ipv4_address(i: &[u8]) -> IResult<&[u8], Ipv4Addr> {
|
||||||
|
let (i, val) = take(4usize)(i)?;
|
||||||
|
let ip = Ipv4Addr::new(val[0], val[1], val[2], val[3]);
|
||||||
|
Ok((i, ip))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_dhcp_packet(packet: &[u8]) -> IResult<&[u8], DhcpMessage> {
|
||||||
|
let (packet, operation) = parse_dhcp_operation(packet)?;
|
||||||
|
let (packet, hardware_type) = parse_dhcp_hardware_type(packet)?;
|
||||||
|
let (packet, hardware_address_length) = be_u8(packet)?;
|
||||||
|
let (packet, hops) = be_u8(packet)?;
|
||||||
|
let (packet, transaction_id) = be_u32(packet)?;
|
||||||
|
let (packet, seconds) = be_u16(packet)?;
|
||||||
|
let (packet, flags) = be_u16(packet)?;
|
||||||
|
let (packet, client_address) = parse_ipv4_address(packet)?;
|
||||||
|
let (packet, server_address) = parse_ipv4_address(packet)?;
|
||||||
|
let (packet, gateway_address) = parse_ipv4_address(packet)?;
|
||||||
|
let (packet, client_hardware_address) = take(6usize)(packet)?;
|
||||||
|
|
||||||
|
Ok((
|
||||||
|
packet,
|
||||||
|
DhcpMessage {
|
||||||
|
operation,
|
||||||
|
hardware_type,
|
||||||
|
hardware_address_length,
|
||||||
|
hops,
|
||||||
|
transaction_id,
|
||||||
|
seconds,
|
||||||
|
flags,
|
||||||
|
client_address,
|
||||||
|
server_address,
|
||||||
|
gateway_address,
|
||||||
|
client_hardware_address,
|
||||||
|
server_hostname: "",
|
||||||
|
boot_file_name: Path::new(""),
|
||||||
|
},
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
static DHCP_PACKET: &'static [u8] = include_bytes!("../dhcp_discover.bin");
|
||||||
|
static DHCP_PACKET2: &'static [u8] = &[
|
||||||
|
0x01, 0x01, 0x06, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x7f, 0x00, 0x00,
|
||||||
|
0x01, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x54, 0x05, 0xdb, 0xa6, 0x96, 0xd0,
|
||||||
|
];
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parses() {
|
||||||
|
let res = super::parse_dhcp_packet(DHCP_PACKET2).unwrap();
|
||||||
|
dbg!(res);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user