## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----setup--------------------------------------------------------------------
library(raddr)

## -----------------------------------------------------------------------------
show <- function(literals) {
  p <- addr_parse(literals)
  out <- data.frame(input = literals)
  for (d in c("strict", "whatwg", "pton", "aton", "getaddrinfo", "curl")) {
    out[[d]] <- format(addr_reading(p, d))
  }
  out
}

## -----------------------------------------------------------------------------
show(c("0177.0.0.1", "010.0.0.1", "192.0.010.1", "192.0.048.1"))

## -----------------------------------------------------------------------------
show(c("10.1", "127.1", "2130706433", "4294967296", "1.4294967296"))

## -----------------------------------------------------------------------------
show(c("1.2.3.4.", "1.2.3.04", "::1.2.3.04"))

## -----------------------------------------------------------------------------
show(c("::1", "00001::", "12345::", "fe80:abcd::1", "1:2:3:4:5:6:7:8:"))

## -----------------------------------------------------------------------------
show(c("fe80::1%lo0", "fe80::1%25lo0", "fe80::1%lo0%en0"))

## -----------------------------------------------------------------------------
addr_zone(addr_pton("fe80::1%lo0"))
addr_pton("fe80::1%lo0") == addr_pton("fe80::1%en0")
addr_zone(addr_pton("fe80::1%25lo0"))

## -----------------------------------------------------------------------------
lpm <- as.data.frame(addr_classify(addr_pton(c("192.0.0.1", "192.0.0.9"))))
lpm[, c("block", "name", "category", "globally_reachable")]

## -----------------------------------------------------------------------------
reg <- addr_registry()
network <- addr_pton(sub("/.*$", "", reg$block))
closed <- !is.na(reg$globally_reachable) & !reg$globally_reachable
open <- !is.na(reg$globally_reachable) & reg$globally_reachable

reg[open & addr_within_any(network, reg$block[closed]), c("block", "name")]

## -----------------------------------------------------------------------------
zero <- as.data.frame(addr_classify(addr_pton(c("0.0.0.0", "0.1.2.3"))))
zero[, c("block", "name", "category")]

## -----------------------------------------------------------------------------
sel <- !is.na(reg$globally_reachable) & !reg$globally_reachable &
  !is.na(reg$forwardable) & reg$forwardable
reg[sel, c("block", "name", "globally_reachable", "forwardable")]

## -----------------------------------------------------------------------------
reg[is.na(reg$globally_reachable),
    c("block", "name", "footnotes", "termination_date")]

## -----------------------------------------------------------------------------
codes <- addr_codes_registry()
codes[codes$layer == "classify", c("code", "strength", "rfc")]

## -----------------------------------------------------------------------------
addr_registry_version()
addr_address_space_version()
addr_transition_version()
addr_category_version()

## -----------------------------------------------------------------------------
addr_registry_outdated()

