unable to get ipv6 working using MC7304

I tried turn off arp by: ifconfig usb0 -arp, and set default route using: ip -6 route add default dev usb0.
But it still does not work.

After researching SLAAC in LInux, I found that if my device is IPv6 client, I should set /proc/sys/net/ipv6/conf/eth0/forwarding to 0 and /proc/sys/net/ipv6/conf/all/forwarding to 0. Alternatively, this can be set statically by put ipv6 forwarding = 0 in /etc/sysctl.conf. Setting ipv6 forwarding = 1 will cause Linux to NOT accept Router Advertisements.
However, this still not work.

I also tried not using static way to get ipv6 address, so I comment out most of the command in my script which configures ipv6 address. I monitored network traffic using tcpdump. When cell modem established an ipv6 data session, there is no Router Solicitation (RS) message sent out by my device(cell modem). And usb0 does not get any ipv6 address. During this time SLQSGetRuntimeSettings returns IPv6 address (each time it gets a different address which is correct). And ping6 still not work during this period. After couple minutes, tcpdump shows that my device(cell modem) received an router advertisement (RA) message. So after that, ifconfig shows usb0 has an ipv6 address. However, SLQSGetRuntimeSettings returns NO IPv6 address, and ping6 does not work still.

My understanding is that for ipv6 client, it will send Router Solicitation (RS) message to router when it is up. And after IPv6 router receives RS, it will reply router advertisement (RA) message. And after IPv6 client receives RA message from router, it will parse this RA message can generate its own IPv6 address. Also, IPv6 router will periodically send RA as well.

My question is that:

  1. Why after established an IPv6 data session, my device or cell modem didn’t send RS message to router? It only received RA from router (I think this is the periodic RA sent by router) after couple minutes.
  2. Why as soon as cell modem received RA from router, SLQSGetRuntimeSettings returns NO IPv6 address.
  3. On the client side, who is responsible for sending RS message? Linux kernel? cell modem? Or I need some linux application software (e.g. odhcp6c). And who is responsible for parsing RA message and generate its IPv6 address? Linux kernel does it? Or I need some linux application software (e.g. odhcp6c)?