Initial import.

This commit is contained in:
Kyle Isom 2023-04-22 01:25:13 -07:00
commit f3fc03392a
6 changed files with 138 additions and 0 deletions

4
BUILD.bazel Normal file
View File

@ -0,0 +1,4 @@
load("@bazel_gazelle//:def.bzl", "gazelle")
# gazelle:prefix git.wntrmute.dev/kyle/bladerunner
gazelle(name = "gazelle")

36
WORKSPACE.bazel Normal file
View File

@ -0,0 +1,36 @@
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "io_bazel_rules_go",
sha256 = "6b65cb7917b4d1709f9410ffe00ecf3e160edf674b78c54a894471320862184f",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.39.0/rules_go-v0.39.0.zip",
"https://github.com/bazelbuild/rules_go/releases/download/v0.39.0/rules_go-v0.39.0.zip",
],
)
http_archive(
name = "bazel_gazelle",
sha256 = "ecba0f04f96b4960a5b250c8e8eeec42281035970aa8852dda73098274d14a1d",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.29.0/bazel-gazelle-v0.29.0.tar.gz",
"https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.29.0/bazel-gazelle-v0.29.0.tar.gz",
],
)
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
############################################################
# Define your own dependencies here using go_repository.
# Else, dependencies declared by rules_go/gazelle will be used.
# The first declaration of an external repository "wins".
############################################################
load("//:deps.bzl", "go_dependencies")
# gazelle:repository_macro deps.bzl%go_dependencies
go_dependencies()
go_rules_dependencies()
go_register_toolchains(version = "1.20.3")
gazelle_dependencies()

19
cmd/kdhcpd/main.go Normal file
View File

@ -0,0 +1,19 @@
package main
import (
"flag"
"log"
"git.wntrmute.dev/kyle/kdhcp/server"
)
func main() {
cfg := &server.Config{}
flag.StringVar(&cfg.Device, "i", "eth0", "network `interface` to listen on")
flag.Parse()
_, err := server.NewServer(cfg)
if err != nil {
log.Fatal(err)
}
}

14
gazelle.sh Normal file
View File

@ -0,0 +1,14 @@
#!/bin/sh
set -euxo pipefail
BAZEL="bazel"
if [ -z "$(command -v ${BAZEL})" ]
then
BAZEL="bazelisk"
fi
$BAZEL run //:gazelle
$BAZEL run //:gazelle -- update-repos -from_file=go.mod -to_macro=deps.bzl%go_dependencies
$BAZEL run //:gazelle

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module git.wntrmute.dev/kyle/kdhcp
go 1.20

62
server/server.go Normal file
View File

@ -0,0 +1,62 @@
package server
import (
"errors"
"log"
"net"
)
// github.com/insomniacslk/dhcp
type Config struct {
Device string `yaml:"device"`
}
type Server struct {
addrs []net.IP
l net.Listener
}
func addrsForDevice(dev string) ([]net.IP, error) {
netInterface, err := net.InterfaceByName(dev)
if err != nil {
return nil, err
}
var addrs []net.IP
devAddrs, err := netInterface.Addrs()
if err != nil {
return nil, err
}
for _, addr := range devAddrs {
ip := net.ParseIP(addr.String())
if ip == nil {
continue // address isn't an IP address
}
// DHCP should only listen on private addresses.
if !ip.IsPrivate() {
continue
}
// only support IPv4 for now
if len(ip) != 4 {
continue
}
addrs = append(addrs, ip)
}
return addrs, nil
}
func NewServer(cfg *Config) (*Server, error) {
addrs, err := addrsForDevice(cfg.Device)
if err != nil {
return nil, err
}
log.Println("server IP list: ", addrs)
return nil, errors.New("not implemented")
}