From 77e0541417d4917f82b7b7bbb0da4e6c890a3dfc Mon Sep 17 00:00:00 2001 From: Attila Lendvai Date: Wed, 13 Feb 2008 00:13:57 +0100 Subject: [PATCH] Add INET-ADDRESS-PRIVATE-P. Signed-off-by: Stelian Ionescu --- net.sockets.asd | 2 +- net.sockets/address-predicates.lisp | 16 ++++++++++++++++ net.sockets/pkgdcl.lisp | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/net.sockets.asd b/net.sockets.asd index ab671c4..0e0b6be 100644 --- a/net.sockets.asd +++ b/net.sockets.asd @@ -23,7 +23,7 @@ (in-package :common-lisp-user) -(eval-when (:load-toplevel) +(eval-when (:compile-toplevel :load-toplevel :execute) (asdf:oos 'asdf:load-op :cffi-grovel)) (asdf:defsystem :net.sockets diff --git a/net.sockets/address-predicates.lisp b/net.sockets/address-predicates.lisp index 6cf995e..cd36ebf 100644 --- a/net.sockets/address-predicates.lisp +++ b/net.sockets/address-predicates.lisp @@ -124,6 +124,22 @@ address object, NIL is returned.") (not (inet-address-loopback-p address)) (not (inet-address-multicast-p address)))))) +(defgeneric inet-address-private-p (address) + (:documentation "Returns T if ADDRESS is in a private network range. +Private IPv4 networks are 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16. +See http://en.wikipedia.org/wiki/Private_network for details.") + (:method ((address ipv4-address)) + (let* ((address-name (address-name address)) + (first (aref address-name 0)) + (second (aref address-name 1))) + (or (= first 10) + (and (= first 172) + (<= 16 second 31)) + (and (= first 192) + (= second 168))))) + (:method ((address address)) + nil)) + (defun ipv6-ipv4-mapped-p (address) "Returns T if ADDRESS is an IPv6 address representing an IPv4 mapped address." diff --git a/net.sockets/pkgdcl.lisp b/net.sockets/pkgdcl.lisp index 0e89898..27feddb 100644 --- a/net.sockets/pkgdcl.lisp +++ b/net.sockets/pkgdcl.lisp @@ -127,6 +127,7 @@ #:inet-address-type #:inet-address-unicast-p #:inet-address-unspecified-p + #:inet-address-private-p #:ipv4-address-p #:ipv6-address-p #:ipv6-admin-local-multicast-p -- 2.11.4.GIT