Enhancement: add constants for IPv4 and IPv6 subnet masks
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 64/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- ruby
- Domaine
- networking
Piste de recherche
Commencez dans la classe IPAddr et examinez la gestion existante d’IPv4, d’IPv6 et des masques réseau. Ajoutez une couverture pour les constantes de masque de sous-réseau proposées et, si le prédicat facultatif est inclus, pour ses cas IPv4 et IPv6 également ; le travail est terminé lorsque les index CIDR renvoient les masques documentés et que les masques non contigus sont rejetés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- Ruby
- Étoiles
- 82
- Forks
- 42
- Merge moyen
- 2 h 13 min
- PR mergées (30 j)
- 2
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ruby/ipaddr
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 35/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
-
Difficulté 3/5 1-2 jours Accessibilité débutants 46/100
Toutes les issues de ruby/ipaddr
Issues similaires
-
good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 92/100
benbalter/jekyll-include-cache#55 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
security
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
grafana/pyroscope#5729 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
rubygems/rubygems.org#6895 ·
Les mainteneurs répondent en général sous 1 jour