tweaks to make it work
This commit is contained in:
parent
3e40faddf5
commit
cc33ab2a70
|
@ -50,10 +50,10 @@ func (c *Cache) Evict() {
|
||||||
if node == nil {
|
if node == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if time.Since(node.Value.(*Packet).ttl) > TTL {
|
if t := time.Since(node.Value.(*Packet).ttl).Seconds(); t > float64(*flagttl) {
|
||||||
c.Radix.Remove(key)
|
c.Radix.Remove(key)
|
||||||
if *flaglog {
|
if *flaglog {
|
||||||
log.Printf("fks-shield: evicting %s\n", key)
|
log.Printf("fks-shield: evicting %s after %f\n", key, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,18 +15,15 @@ var (
|
||||||
server = flag.String("server", "127.0.0.1:53", "remote server address")
|
server = flag.String("server", "127.0.0.1:53", "remote server address")
|
||||||
flagttl = flag.Int("ttl", 30, "ttl (in seconds) for cached packets")
|
flagttl = flag.Int("ttl", 30, "ttl (in seconds) for cached packets")
|
||||||
flaglog = flag.Bool("log", false, "be more verbose")
|
flaglog = flag.Bool("log", false, "be more verbose")
|
||||||
TTL time.Duration = 0
|
|
||||||
// tsifile = flag.String("tsig", "", "file with tsig secrets (key.:base64)")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func serve(w dns.ResponseWriter, r *dns.Msg, c *Cache) {
|
func serve(w dns.ResponseWriter, r *dns.Msg, c *Cache) {
|
||||||
if *flaglog {
|
|
||||||
log.Printf("fks-shield: query")
|
|
||||||
}
|
|
||||||
TTL = time.Duration(*flagttl * 1e9)
|
|
||||||
// Check for "special queries"
|
// Check for "special queries"
|
||||||
switch {
|
switch {
|
||||||
case r.IsNotify():
|
case r.IsNotify():
|
||||||
|
if *flaglog {
|
||||||
|
log.Printf("fks-shield: notify/update")
|
||||||
|
}
|
||||||
fallthrough
|
fallthrough
|
||||||
case r.IsUpdate():
|
case r.IsUpdate():
|
||||||
client := new(dns.Client)
|
client := new(dns.Client)
|
||||||
|
@ -35,6 +32,9 @@ func serve(w dns.ResponseWriter, r *dns.Msg, c *Cache) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if *flaglog {
|
||||||
|
log.Printf("fks-shield: query")
|
||||||
|
}
|
||||||
|
|
||||||
if p := c.Find(r); p != nil {
|
if p := c.Find(r); p != nil {
|
||||||
dns.RawSetId(p, r.MsgHdr.Id)
|
dns.RawSetId(p, r.MsgHdr.Id)
|
||||||
|
@ -68,13 +68,14 @@ func main() {
|
||||||
// Only listen on UDP
|
// Only listen on UDP
|
||||||
go func() {
|
go func() {
|
||||||
if err := dns.ListenAndServe(*listen, "udp", nil); err != nil {
|
if err := dns.ListenAndServe(*listen, "udp", nil); err != nil {
|
||||||
log.Fatal("fks-shield: failed to setup %s %s", *listen, "udp")
|
log.Fatalf("fks-shield: failed to setup %s %s", *listen, "udp")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
// Every 10 sec run the cache cleaner
|
// Every 10 sec run the cache cleaner
|
||||||
time.Sleep(10 * 1e9)
|
time.Sleep(10 * 1e9)
|
||||||
|
log.Printf("cache clean")
|
||||||
cache.Evict()
|
cache.Evict()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
Loading…
Reference in New Issue