anchor.diff:    (declare (ignore address))
     nil)
   
  +(defgeneric address-type (address))
  +
   (defmethod address-type ((address ipv4addr))
     (declare (ignore address))
     :ipv4)
  
positive.code:         (unix-error () (error 'parse-error))))
      (in6-addr-to-ipv6-array in6-addr)))
  
  (defun vector-to-colon-separated (vector &optional (case :downcase))
    "Convert an 8-element vector to a colon-separated IPv6 address. `CASE' may be :DOWNCASE or :UPCASE."
    (coercef vector 'ipv6-array)
    (check-type case (member :upcase :downcase))
    (with-foreign-object (sin6 'et:sockaddr-in6)
      (with-foreign-pointer (namebuf et:inet6-addrstrlen bufsize)
        (make-sockaddr-in6 sin6 vector)
        (et:inet-ntop et:af-inet6                          ; address family
                      (foreign-slot-pointer
                        sin6 'et:sockaddr-in6 'et:addr)    ; pointer to struct in6_addr
                      namebuf                              ; destination buffer
                      bufsize)                             ; INET6_ADDRSTRLEN
        (return-from vector-to-colon-separated
          (let ((str (foreign-string-to-lisp namebuf bufsize)))
            (case case
              (:downcase (nstring-downcase str))
              (:upcase   (nstring-upcase   str))))))))
  
  (defun string-address-to-vector (address)
    "Convert a string address(dotted or colon-separated) to a vector address.
  
negative.code: (defgeneric ipv6-ipv4-mapped-p (addr)
    (:documentation "Returns T if ADDR is an IPv6 address representing an IPv4 mapped address."))
  (defmethod ipv6-ipv4-mapped-p ((addr ipv6addr))
    (ipv4-on-ipv6-mapped-vector-p (name addr)))
  
  (defmethod inetaddr-multicast-p ((addr ipv6addr))
    (eql (logand (aref (name addr) 0)
  