星期一, 五月 31, 2010

LISP CDR 和 CAR意思

(在第一台实作 Lisp 语言的机器上, CAR 与 CDR 指令分别表示"Contents of Address Register" 及"Contents of Decrement Register"。
而 cons 就是透过这两个缓存器而实作的。) Cons 很容易使用:

星期五, 五月 28, 2010

如何在Java Mail中是用Log4j来记录Java Mail Debug 信息?的

Java Mail 的debug信息非常丰富,包含了同服务器完整的协议过程,
但是这个debug是直接输出到System.out的,需要用 >>来截获。

不过Java Mail 提供了setDebugOut(PrintStream)的接口,
就用这个可以实现 Java Mail和 log4j的联合使用

首先编写一个PrintStream的类做一个Bridge 同  Log4j


package com.email;

import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.log4j.*;
/**
 *
 * @author U253MIS038
 */
public class LoggingOutputStream extends OutputStream
{

    protected boolean hasBeenClosed = false;

    protected byte[] buf;

    protected int count;

    private int bufLength;

    public static final int DEFAULT_BUFFER_LENGTH = 2048;

    protected Logger logger;

    protected Level level;

    private LoggingOutputStream()
    {

    }



    public LoggingOutputStream(Logger log, Level level)
            throws IllegalArgumentException {
        if (log == null) {
            throw new IllegalArgumentException("cat == null");
        }
        if (level == null) {
            throw new IllegalArgumentException("priority == null");
        }

        this.level = level;
        logger = log;
        bufLength = DEFAULT_BUFFER_LENGTH;
        buf = new byte[DEFAULT_BUFFER_LENGTH];
        count = 0;
    }



    public void close()
    {
        flush();
        hasBeenClosed = true;
    }



    public void write(final int b) throws IOException
    {
        if (hasBeenClosed) {
            throw new IOException("The stream has been closed.");
        }

        if (count == bufLength)
        {
            final int newBufLength = bufLength + DEFAULT_BUFFER_LENGTH;
            final byte[] newBuf = new byte[newBufLength];

            System.arraycopy(buf, 0, newBuf, 0, bufLength);

            buf = newBuf;
            bufLength = newBufLength;
        }

        buf[count] = (byte) b;
        count++;
    }



    public void flush()
    {
        if (count == 0)
        {
            return;
        }


        if (count == 1 && ((char) buf[0]) == '\n')
        {
            reset();
            return;
        }
        final byte[] theBytes = new byte[buf.length];
        System.arraycopy(buf, 0, theBytes, 0, count);
        logger.log(level, new String(theBytes));
        reset();
    }


    private void reset()
    {
             count = 0;
    }

}


2,然后再调用Java Mail中使用如下方法实现了定向

            static Logger log  = Logger.getLogger( email.class );
            Properties props = System.getProperties();
               
            config = new PropertiesConfiguration(PROP_FILE);
            String mailip = config.getString("EMAIL_SERVER_IP");       
            props.put("mail.smtp.host", mailip);

            Session session = Session.getInstance(props, null);
            session.setDebugOut(new PrintStream(new  LoggingOutputStream(Logger.getRootLogger(),Level.DEBUG), true));
                        session.setDebug(enableDebug);

星期一, 五月 24, 2010

java 如何确定一个对象是否数组?

Java array reflection: isArray vs. instanceof

那个方法好呢?

if(obj.getClass().isArray()) {}

and

if(obj instanceof Object[]) {}

In general, use the instanceof operator to test whether an object is an array.

At the JVM level, the instanceof operator translates to a specific "instanceof" byte code, which is highly optimized in most JVM implementations.

The reflective approach (getClass().isArray()) is compiled to two separate "invokevirtual" instructions. The more generic optimizations applied by the JVM to these may not be as fast as the hand-tuned optimizations inherent in the "instanceof" instruction.

There are two special cases: null references and references to primitive arrays.

A null reference will cause instanceof to result false, while the isArray throws a NullPointerException.

Applied to a primitive array, the instanceof results false, but the isArray returns true.

If obj is of type int[] say, then that will 
have an array Class but not be an instance of Object[].
So what do you want to do with obj. If you are going to
cast it, go with instanceof. If you are going to use

reflection, then use .getClass().isArray().

总结:
isArray的方位更加广泛。
instance Object[]不能确别int[]等数组。

所以,那个更好,要看自己的具体情况了





星期六, 五月 15, 2010

Lisp命名规则2

另外一个重要的习惯是全局变量的名字以*号开始和结束(*THREADS*);常量名字用+号开始和结尾(+PI+),
低级函数用%开始和技术(%SUM%).语言标准名字的定义只允许用字母(A-Z)和*,+,-,/,1,2,<,=,> &

self-evaluating:
自执行

最重要的两个自执行常量:T和NIL代表 true和false.
另一类最重要的自执行符号是关键词符号.其名字以:开始

最基本的程序组件:
函数,变量,及宏
function,variable,macro


星期五, 五月 14, 2010

Lisp的命名

在LISP程序中,名字比如FORMAT和hello-world及*db*用来代表一个对象称之为符号(symbols).读者对指定
的名字是否用在变量,函数或其它东西一无所知。.它只是按照字符序列读出并被代表一个对象的名字。
几乎所有的字符都可用在名字中.空白字符不行,因为在list中元素也是用空白字符来分割的.
数字也可以用在名字中的一部分而不是解释成一个数字.相似的,名字可以包含一个句号(.),但无法阅读
只包含一个句号的名字。10个字符用于其他目的而不能在名字中出现:


  1. 1.开始和结束括号() open and close parentheses
  2. 2.双引号和单引号 "' double and single quotes
  3. 3.反引号(`)backtick
  4. 4.逗号 comma,
  5. 5.冒号: colon
  6. 6.分号;semicolon
  7. 7.反斜线 \ backslash
  8. 8.竖线| vertical bar

星期一, 五月 10, 2010

Re: Lisp注释语句.

Lisp 注释规则二:

缩进规则:
    函数调用形式参数对齐
    宏和特殊形式针对最后一个左括号缩进两格
    ;;;; 文件级别注释
    ;;; 段落级别注释
    ;;  函数内部代码注释
    ;   函数内部代码单行注释,放在代码后面



2010/5/7 William Wang <javacave@gmail.com>
在阅读 Practical Common Lisp书的时候,突然想到LISP的注释符号应该是如何写呢?
google了下。
http://www.cc.gatech.edu/computing/classes/cs2360/ghall/style/com_mechanics.html

单句注释;分号表示 ;;;header
块注释 #|
 Notes:zh
  #

另外一种非常规的注释,是在代码中用“ ”来表示,比如下列代码

	(defun mumble_fcn ( arg1 arg2  ) 
"This function takes two arbitrary arguments and returns some
arbitrarily random result. NOTE: both arguments should be non-nil."
(do-random-thing (do-random-thing arg1 ) arg2 ))




星期五, 五月 07, 2010

SAP NetWeaver Composition Environment 7.2 Trial Version 安装 步骤 Create secure store 出现错误

SAP NetWeaver Composition Environment 7.2 Trial Version
首先下载了jdk 1.6.0_07之上的版本,我下载的是 1.6.0_20版本,并且下载了jce 6的文件,很小只有8K.
安装到步骤时候出现错误:
createsecurestore.JPG
安装 :18/29的时候,Create secure store
 
根据提示打开错误日志:
C:\Program Files\sapinst_instdir\NW72_DEV_ADA\SERVER\SecureStoreCreate.log
发现如下提示:

FATAL: Main class "com.sap.security.core.server.secstorefs.SecStoreFS" cannot be started:
  FATAL: java.lang.ExceptionInInitializerError
    at javax.crypto.Cipher.getInstance(DashoA13*..)
    at javax.crypto.Cipher.getInstance(DashoA13*..)
    at iaik.security.provider.IAIK.a(Unknown Source)
    at iaik.security.provider.IAIK.addAsJDK14Provider(Unknown Source)
    at iaik.security.provider.IAIK.addAsJDK14Provider(Unknown Source)
    at com.sap.security.core.server.secstorefs.Crypt.<clinit>(Crypt.java:85)
    at com.sap.security.core.server.secstorefs.SecStoreFS.setSID(SecStoreFS.java:177)
    at com.sap.security.core.server.secstorefs.SecStoreFS.handleCreate(SecStoreFS.java:838)
    at com.sap.security.core.server.secstorefs.SecStoreFS.main(SecStoreFS.java:1308)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sap.engine.offline.OfflineToolStart.main(OfflineToolStart.java:161)
Caused by: java.lang.SecurityException: Cannot set up certs for trusted CAs
    at javax.crypto.SunJCE_b.<clinit>(DashoA13*..)
    ... 14 more
Caused by: java.lang.SecurityException: Cannot locate policy or framework files!
    at javax.crypto.SunJCE_b.i(DashoA13*..)
    at javax.crypto.SunJCE_b.g(DashoA13*..)
    at javax.crypto.SunJCE_b$1.run(DashoA13*..)
    at java.security.AccessController.doPrivileged(Native Method)
    ... 15 more

  FATAL: com.sap.engine.offline.OfflineToolStart will abort now with exitcode 2

Solution:
copy
C:\Program Files\Java\jre6\lib\security 下所有文件到sap临时安装JVM目录下,
如果有提示是否需要覆盖,不要覆盖SAP原来的文件。
to
C:\Program Files\sapinst_instdir\NW72_DEV_ADA\SERVER\sapjvm\sapjvm_6\jre\lib\security


Lisp注释语句.

在阅读 Practical Common Lisp书的时候,突然想到LISP的注释符号应该是如何写呢?
google了下。
http://www.cc.gatech.edu/computing/classes/cs2360/ghall/style/com_mechanics.html

单句注释;分号表示 ;;;header
块注释 #|
 Notes:zh
  #

另外一种非常规的注释,是在代码中用“ ”来表示,比如下列代码

	(defun mumble_fcn ( arg1 arg2  ) 
"This function takes two arbitrary arguments and returns some
arbitrarily random result. NOTE: both arguments should be non-nil."
(do-random-thing (do-random-thing arg1 ) arg2 ))



星期二, 四月 20, 2010

数据库Auto time stamp字段

MYSQL 5.x支持:通过字段申明:
ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

MSSQL:支持:
版本戳 timestamp 字段类型。

星期一, 四月 19, 2010

SAP相关 第一帖

2010.4.20日。

今天装好了Net Weaver 7.1 SR1
和 笔记本上ECC 6.0 EH4 FOR MSSQL 2005 WINDOW 7

准备全力投入SAP 了

星期二, 一月 26, 2010

jsp code too large for try statement

必杀技:
在JAVA_OPTS里加入以下变量:

1.java -Dcom.sun.tools.javac.main.largebranch=true

java lib\tools.jar 包内

注意,如果装有多个版本的JDK,需要通过设置JAVA_HOME来指明使用的JDK的路径
只是在path中加入是不够的。

星期三, 一月 06, 2010

Linux文件名包含特殊字符无法使用通配符:Argument list too long

Linux文件名包含特殊字符比如-,括弧()等等,grep "xxx" filename

会出现:Argument list too long错误

简单解决办法,同find 一起使用

find . -exec grep -l "搜索字符" "{}" \;

列出包含 “搜索字符”的文件名

星期二, 十二月 15, 2009

IE getElementById display

Could not get the display property. Invalid argument

使用obj.style.display='none'
出现错误:
Could not get the display property. Invalid argument

function hider() {
var label, control;

if(document.getElementById && (label = document.getElementById('hidden1'))
&& (control = document.getElementById('hidden2'))
&& label.style && control.style)
{
label.style.display = control.style.display
= ('none' == label.style.display) ? '' : 'none';
}

星期二, 十二月 01, 2009

clear window update store directory

clear window update store directory

%systemdrive%\windows\SoftwareDistribution

clear

星期五, 十一月 20, 2009

wxwidgets convet wxString to C Style char

wxString 提供的 c_str,fn_str,char_str等都source code encoding相关

如果想转换成功,必须注意编译的encoding选择。

比如如果打开了unicode的编译选择,wxWidgets想从一个wxString得到一个 c Style的char *
最安全的方法为:
wxString asc=wxString("this is 汉字");
char *=asc.mb_str(wxConvUTF8);

curl 如何在mingw下使用


首先从http://curl.haxx.se/下载最新的源代码包。
比如 curl-7.19.7.tar.gz
1.然后将其展开到一个目录下,将来将要引用这里面的内容,include和lib
2.进入lib目录下:运行 mingw32-make -f Makefile.m32 编译生成所有的库.libcur.a及libcurl.dll等
3.进入/curl/docs/examples/ 编译个测试程序:
gcc -DCURL_STATICLIB -I ../../include -L ../../lib simple.c -o simple -lcurl -lws2_32 -lwinmm

运行simple.exe,能够正常运行。
CodeBlocks 里如何使用libcurl 实现static link(静态连接,避免运行使用libcurl.dll)

在codeblocks里可以在项目属性build options link setting 里加入 libcur.a的包,以及定义编译使用静态链接的属性
CURL_STATICLIB或者在使用的代码里加入:

#define CURL_STATICLIB

codeblock配置如图:


注意:如果编译的时候出现符号错误:
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_set_optionA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_initA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_set_optionA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_simple_bind_sA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_search_sA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_first_entry'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_get_dnA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_first_attributeA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_get_values_lenA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_value_free_len'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_memfreeA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_next_attributeA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_memfreeA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_next_entry'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_err2stringA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_unbind_s'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_msgfree'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_err2stringA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_set_optionA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_simple_bind_sA'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ber_free'
curl-7.19.7\lib\libcurl.a(ldap.o) undefined reference to `_imp__ldap_err2stringA'

这是需要连接mingw32的 ldap32 .这个需要在项目的build option link lib 里加入:
D:\MinGW\lib\libwldap32.a,顺序要注意.

libwldap32.a必须在libcurl.a的后面

星期一, 十一月 16, 2009

Windows rundll32 utility

Any program using the Windows file association mechanism can be started with the rundll32 utility.

用一个编辑器,打开一个默认后缀的文件:

RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL c:\temp\a.txt

ere a list of what is available
rundll32 shell32,Control_RunDLL                     Run The Control Panel
rundll32 shell32,Control_RunDLL X Start applet X of Control Panel
("X" = any CPL filename)
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4 Regional setting, Date tab

rundll32 shell32,OpenAs_RunDLL \dir\filename.txt Open The 'Open With...' Window
rundll32 shell32,ShellAboutA Info-Box Open 'About Window Window'
rundll32 shell32,Control_RunDLL desk.cpl Open Display Properties
rundll32 user,cascadechildwindows Cascade All Windows
rundll32 user,tilechildwindows Minimize All Child-Windows
rundll32 user,repaintscreen Refresh Desktop
rundll32 keyboard,disable Lock The Keyboard
rundll32 mouse,disable Disable Mouse
rundll32 user,swapmousebutton Swap Mouse Buttons
rundll32 user,setcursorpos Set Cursor Position To (0,0)
rundll32 user,wnetconnectdialog Show 'Map Network Drive' Window
rundll32 user,wnetdisconnectdialog Show 'Disconnect Network Disk' Window
rundll32 user,disableoemlayer Display The BSOD (blue screen of death)Window
rundll32 diskcopy,DiskCopyRunDll Show Copy Disk Window
rundll32 rnaui.dll,RnaWizard Run 'Internet Connection Wizard'
rundll32 shell32,SHFormatDrive Run 'Format Disk (A)' Window
rundll32 shell32,SHExitWindowsEx -1 Cold Restart Of Windows Explorer
rundll32 shell32,SHExitWindowsEx 1 Shut Down Computer
rundll32 shell32,SHExitWindowsEx 0 Logoff Current User
rundll32 shell32,SHExitWindowsEx 2 Windows9x Quick Reboot
rundll32 krnl386.exe,exitkernel Force Windows 9x To Exit (no confirmation)
rundll32 rnaui.dll,RnaDial "MyConnect" Run 'Net Connection' Dialog
rundll32 msprint2.dll,RUNDLL_PrintTestPage Choose & Print Test Page Of Current Printer
rundll32 user,setcaretblinktime Set New Cursor Rate Speed
rundll32 user, setdoubleclicktime Set New DblClick Speed (Rate)
rundll32 sysdm.cpl,InstallDevice_Rundll Hardware installation wizard
rundll32 user,MessageBeep Default beep sound
rundll32 user32.dll,MessageBeep Default beep sound (XP)
rundll32 shell32.dll,Control_RunDLL appwiz.cpl Add/remove programs
rundll32 shell32.dll,Control_RunDLL timedate.cpl,,0 Date/time settings
rundll32 shell32.dll,Control_RunDLL odbccp32.cpl ODBC settings

rundll32.exe url.dll,FileProtocolHandler http:\\www.rgagnon.com
rundll32.exe url.dll,FileProtocolHandler c:\mypdf.pdf
Open the associated application
rundll32 amovie.ocx,RunDll /play /close c:\mymovie.mpg
Play multimedia (movie or sound)

Rundll32.exe powrprof.dll,SetSuspendState Sleep Put the computer in Sleep mode


Privacy (IE)
rundll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 Internet temporary files
rundll32.exe InetCpl.cpl,ClearMyTracksByProcess 2 Cookies
rundll32.exe InetCpl.cpl,ClearMyTracksByProcess 1 History
rundll32.exe InetCpl.cpl,ClearMyTracksByProcess 16 Forms Data
rundll32.exe InetCpl.cpl,ClearMyTracksByProcess 32 Passwords
rundll32.exe InetCpl.cpl,ClearMyTracksByProcess 255 Delete everything

星期二, 十一月 03, 2009

mysql get table index SQL command

1.show index from tablename
2.select * from information_schema.statistics where table_name='tableName' ;

星期一, 十一月 02, 2009

Mysql 性能分析


EXPLAIN
SELECT * FROM table IGNORE INDEX (indexname) WHERE

星期三, 十月 28, 2009

网络地址类型一览

URL: http://publib.boulder.ibm.com/infocenter/zvm/v5r4/topic/com.ibm.zvm.v54.kijl0/hcsk7b3014.htm

The type of a IPv6 address is identified by the high-order bits of the address, as follows:

Table 2. Types of IPv6 Addresses
Address type Binary prefix IPv6 notation
Unspecified 00 . . . 0 (128 bits) ::/128
Loopback 00 . . . 1 (128 bits) ::1/128
Multicast 11111111 FF00::/8
Link-local unicast 1111111010 FE80::/10
Site-local unicast 1111111011 FEC0::/10
Global unicast (everything else)

Three categories of IP addresses are supported in IPv6:

Unicast
An identifier for a single interface. A packet sent to a unicast address is delivered to the interface identified by that address. It can be link-local scope, site-local scope, or global scope.
Multicast
An identifier for a group of interfaces (typically belonging to different nodes). A packet sent to a multicast address is delivered to all interfaces identified by that address.
Anycast
An identifier for a group of interfaces (typically belonging to different nodes). A packet sent to an anycast address is delivered to the closest member of a group, according to the routing protocols' measure of distance.

Anycast addresses are taken from the unicast address spaces (of any scope) and are not syntactically distinguishable from unicast addresses. Anycast is described as a cross between unicast and multicast. Like multicast, multiple nodes may be listening on an anycast address. Like unicast, a packet sent to an anycast address will be delivered to one (and only one) of those nodes. The exact node to which it is delivered is based on the IP routing tables in the network.

There are no broadcast addresses in IPv6. Multicast addresses have superseded this function.

Unicast IPv6 Addresses

IPv6 unicast addresses can be aggregated with prefixes of arbitrary bit-length similar to IPv4 addresses under Classless Interdomain Routing (CIDR).

A unicast address has the following format:

Figure 8. Unicast Address Format
n bits 128-n bits
network prefix interface ID

There are several types of unicast addresses in IPv6: global unicast, site-local unicast, and link-local unicast. There are also some special-purpose subtypes of global unicast, such as IPv6 addresses with embedded IPv4 addresses. Additional address types or subtypes can be defined in the future.

Global Unicast Addresses

The general format for IPv6 global unicast addresses is:

Figure 9. Global Unicast Address Format
n bits m bits 128-n-m bits
global routing prefix subnet ID interface ID

The global routing prefix is a (typically hierarchically-structured) value assigned to a site (a cluster of subnets/links). The subnet ID is an identifier of a link within the site. The interface ID is used to identify an interface on a link; interface IDs are required to be unique within a subnet prefix.

All global unicast addresses other than those that start with B'000' have a 64-bit interface ID field (that is, n + m = 64). Global unicast addresses that start with B'000' have no such constraint on the size or structure of the interface ID field.

Examples of global unicast addresses that start with B'000' are IPv6 address with embedded IPv4 addresses. These include IPv4-mapped IPv6 addresses and IPv4-compatible IPv6 addresses.

Local Use Address

There are two types of local-use unicast addresses defined: link-local and site-local. The link-local address is for use on a single link and the site-local address is for use in a single site.

Link-local Addresses

Link-local addresses have the following format:

Figure 10. Link-local address format
10 bits 54 bits 64 bits
1111111010 0 interface ID

A link-local address is required on each physical interface. Link-local addresses are designed to be used for addressing on a single link for purposes such as automatic address configuration, neighbor discovery, or in the absence of routers. It also may be used to communicate with other nodes on the same link. A link-local address is automatically assigned.

Routers will not forward any packets with link-local source or destination addresses to other links.

Site-local Addresses

Site-local addresses have the following format:

Figure 12. Site-local address format
10 bits 38 bits 16 bits 64 bits
1111111011 0 subnet ID interface ID

Site-local addresses are designed to be used for addressing inside of a site without the need for a global prefix. A site-local address cannot be reached from another site. A site-local address is not automatically assigned to a node. It must be assigned using automatic or manual configuration.

Routers will not forward any packets with site-local source or destination addresses outside of the site.

Loopback Address

The unicast address 0:0:0:0:0:0:0:1 is called the loopback address. It cannot be assigned to any physical interface. It may be thought of as a link-local unicast address assigned to a virtual interface (typically called the loopback interface) that allows local applications to send messages to each other.

The loopback address cannot be used as the source address in IPv6 packets that are sent outside of a node. An IPv6 packet with a destination address of loopback cannot be sent outside of a node and be forwarded by an IPv6 router. A packet received on an interface with destination address of loopback will be dropped.

Unspecified Address

The address 0:0:0:0:0:0:0:0 is called the unspecified address. It will not be assigned to any node. It indicates the absence of an address. One example of its use is in the Source Address field of any IPv6 packets sent by an initializing host before it has learned its own address.

The unspecified address cannot be used as the destination address of IPv6 packets or in IPv6 routing headers. An IPv6 packet with a source address of unspecified cannot be forwarded by an IPv6 router.

IPv4-mapped IPv6 Addresses

These addresses hold an embedded global IPv4 address. They are used to represent the addresses of IPv4 nodes as IPv6 addresses to applications that are enabled for IPv6 and are using AF_INET6 sockets. This allows IPv6 enabled applications always to deal with IP addresses in IPv6 format regardless of whether the TCP/IP communications are occurring over IPv4 or IPv6 networks. The dual-mode TCP/IP stack performs the transformation of the IPv4-mapped addresses to and from native IPv4 format. IPv4-mapped addresses have the following format:

Figure 14. IPv4-mapped IPv6 address
80 bits 16 32 bits
0000...0000 FFFF IPv4 address

Examples:

  • In IPv6-IPv4 decimal form:
    ::FFFF:129.144.52.38
  • In IPv6-compressed form
    ::FFFF:8190:3426
IPv4-compatible IPv6 Addresses

These addresses hold an embedded global IPv4 address. They are used dynamically to tunnel IPv6 packets over IPv4 networks. IPv6 nodes that use this technique are assigned special IPv6 unicast addresses which hold an IPv4 address in the low-order 32-bits. IPv4-compatible IPv6 addresses have the following format:

Figure 15. IPv4-compatible IPv6 address
80 bits 16 32 bits
0000...0000 0000 IPv4 address

Examples:

  • In IPv6-IPv4 decimal form
    ::129.144.52.38
  • In IPv6-compressed form
    ::8190:3426
Multicast IPv6 Addresses

An IPv6 multicast address is an identifier for a group of interfaces (typically on different nodes). It is identified with a prefix of 11111111 or FF in hexadecimal notation. It provides a way of sending packets to multiple destinations. An interface may belong to any number of multicast groups.

Multicast address format

Binary 11111111 at the start of the address identifies the address as being a multicast address. Multicast addresses have the following format:

Figure 16. Multicast address format
8 4 4 112 bits
11111111 flags scope group ID
Figure 17. Flags in multicast address
 ---------------
| 0 | 0 | 0 | T |

---------------
  • The 3 high-order flags are reserved, and must be initialized to 0.
  • T = 0 indicates a permanently-assigned (well-known) multicast address, assigned by the Internet Assigned Number Authority (IANA).
  • T = 1 indicates a non-permanently assigned (transient) multicast address.

Scope is a 4-bit multicast scope value used to limit the scope of the multicast group. Group ID identifies the multicast group, either permanent or transient, within the given scope.

Multicast scope

The scope field indicates the scope of the IPv6 internetwork for which the multicast traffic is intended. The size of this field is 4 bits. In addition to information provided by multicast routing protocols, routers use multicast scope to determine whether multicast traffic can be forwarded. For multicast addresses there are 14 possible scopes (some are still unassigned), ranging from interface-local to global (including both link-local and site-local).

The following table lists the defined values for the scope field:

Table 3. Multicast scope field values
Value Scope
0 Reserved
1 Interface-local scope (same node)
2 Link-local scope (same link)
3 Subnet-local scope
4 Admin-local scope
5 Site-local scope (same site)
8 Organization-local scope
E Global scope
F Reserved
All other scope field values are currently undefined.

For example, traffic with the multicast address of FF02::2 has a link-local scope. An IPv6 router never forwards this type of traffic beyond the local link.

Interface-local
The interface-local scope spans a single interface only. A multicast address of interface-local scope is useful only for loopback delivery of multicasts within a node, for example, as a form of interprocess communication within a computer. Unlike the unicast loopback address, interface-local multicast addresses may be joined on any interface.
Link-local
Link-local addresses are used by nodes when communicating with neighboring nodes on the same link. The scope of the link-local address is the local link.
Subnet-local
Subnet-local scope is given a different and larger value than link-local to enable possible support for subnets that span multiple links.
Admin-local
Admin-local scope is the smallest scope that must be administratively configured, that is, not automatically derived from physical connectivity or other, non-multicast-related configuration.
Site-local
The scope of a site-local address is the site or organization internetwork. Addresses must remain within their scope. A router must not forward packets outside of its scope.
Organization-local
This scope is intended to span multiple sites belonging to a single organization.
Global
Global scope is used for uniquely identifying interfaces anywhere in the Internet.
Multicast groups

Group ID identifies the multicast group, either permanent or transient, within the given scope. The size of this field is 112 bits. Permanently assigned groups can use the group ID with any scope value and still refer to the same group. Transient assigned groups can use the group ID in different scopes to refer to different groups. Multicast addresses from FF01:: through FF0F:: are reserved, well-known addresses. Use of these group IDs for any other scope values, with the T flag equal to 0, is not allowed.

All-nodes multicast groups

These groups identify all IPv6 nodes within a given scope. Defined groups include:

  • Interface-local all-nodes group (FF01::1)
  • Link-local all-nodes group (FF02::1)
All-routers multicast groups

These groups identify all IPv6 routers within a given scope. Defined groups include:

  • Interface-local all-routers group (FF01::2)
  • Link-local all-routers group (FF02::2)
  • Site-local all-routers group (FF05::2)
Solicited-node multicast group

For each unicast address which is assigned to an interface, the associated solicited-node multicast group is joined on that interface. The solicited-node multicast address facilitates the efficient querying of network nodes during address resolution.

Anycast IPv6 Addresses

An IPv6 anycast address is an identifier for a set of interfaces (typically belonging to different nodes). A packet sent to an anycast address is delivered to one of the interfaces identified by that address (the nearest interface), according to the routing protocols' measure of distance. It uses the same formats as a unicast address, so one cannot differentiate between a unicast and an anycast address simply by examining the address. Instead, anycast addresses are defined administratively.

For more information about IPv6 addressing, see RFC 3513, Internet Protocol Version 6 (IPv6) Addressing Architecture.