Enhancement: add constants for IPv4 and IPv6 subnet masks
Nessuno ha ancora preso questa issue.
- Lingua principale
- Ruby
- Stelle
- 82
- Fork
- 42
- Merge medio
- 2h 24m
- PR unite (30g)
- 3
Descrizione
Rationale: This SO question demonstrates there is at least some need to manipulate netmasks into CIDR integers. The accepted answer contains a bug which can be easily eliminated by hard coding the 2 sets of netmasks into the IPAddr class - see my alternative answer.
Proposed solution: Define IPAddr::IPV4_SUBNET_MASKS and IPAddr::IPV6_SUBNET_MASKS as follows:
class IPAddr
IPV4_SUBNET_MASKS = (0..32).map { |n| IPAddr.new("0.0.0.0/#{n}").netmask }
IPV6_SUBNET_MASKS = (0..128).map { |n| IPAddr.new("0::/#{n}").netmask }
end
# Now a user can do the following to get a subnet mask from a CIDR integer:
IPAddr::IPV4_SUBNET_MASKS[24]
# => "255.255.255.0"
IPAddr::IPV6_SUBNET_MASKS[64]
# => "ffff:ffff:ffff:ffff:0000:0000:0000:0000"
Optional: Add a predicate to check if an instance of IPAddr is a netmask:
class IPAddr
def netmask?
if ipv4?
IPV4_SUBNET_MASKS.include? to_s
else
IPV6_SUBNET_MASKS.include? to_s
end
end
end
ipaddr1 = IPAddr.new '255.254.255.0'
ipaddr1.netmask? # => false
ipaddr2 = IPAddr.new '255.255.255.0/24'
ipaddr2.netmask? # => true
ipaddr3 = IPAddr.new '255.255.255.0'
ipaddr3.netmask? # => true
# And so on for IPv6 addresses
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia nella classe IPAddr e ispeziona la gestione esistente di IPv4, IPv6 e delle netmask. Aggiungi la copertura per le costanti di subnet mask proposte e, se viene incluso il predicato opzionale, anche per i relativi casi IPv4 e IPv6; il lavoro è completato quando gli indici CIDR restituiscono le maschere documentate e le maschere non contigue vengono rifiutate.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- ruby
- Ambito
- networking
- Tipo di issue
- Funzionalità
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 64/100