The IPv6 routes are created as static routes because you’re routing a block of prefixes to the connected customer, vs. applying a specific routable IPv4 address directly onto the session itself.
If your ASBR were a Cisco router, I’d say to use the summary-address command in the OSPF configuration.
Interior vs Exterior route sumarization:
The difference between summary-address and area range is not immediately obvious, but it makes sense when you think about how OSPF works.
ABR routers will take LSAs from one area and flood them into other areas as sumary net links. (I think this is LSA type 3, but don’t quote me on that)
Area range tells the router not to translate LSAs falling within that range. Instead, what it does is whenever there is any route available (and I think it needn’t even be an OSPF route) within that range, instead of translating the individual LSAs into type (3?) LSAs, the ABR will generate an aggregated summary prefix (type 3?) that covers the entire range and announce only that aggregate prefix.
This works for normal interior-to-ospf routes, but not for external routes (type 5 & 7) which are treated differently.
External routes are pretty much just forwarded throughout OSPF except in stub,totally stubby areas and NSSA areas. They reference the originating router as well as either an unchanging (E2) metric or a metric that includes the path cost to reach the originating ASBR (E1). In both cases, these aren’t treated as part of interior OSPF routing, so they don’t get aggregated as part of an area’s IP range. They’re considered to be “beyond” the area and not “within” the area.
In Cisco, you can configure the summary-address directive on an ASBR. This works like the area range, but only applies to the routes being injected by that very ASBR. (i.e. it won’t aggregate sub-prefixes originated by other ASBR routers). Whenever at least one sub prefix is to be injected by the ASBR, it will instead create a null route for the summary prefix, and then announce that summary prefix as an external route, suppressing the injection of the actual sub prefixes.
ROS doesn’t have this functionality built in, AFAIK.
However, you can configure this behavior using a blackhole type route + a route filter on the OSPF process itself.
Create a static blackhole route for the /48 you wish to aggregate.
/ipv6 route add type=blackhole dst-address=2001:db8:cafe::/48
Create a route filter for OSPF-in which looks like this:
prefix=2001:db8:cafe::/48 prefix-length=49-128 action=discard
You now have the same behavior. Realize that this must be done at each ASBR itself, and it can only aggregate prefixes it directly originates. If some other router in the topology injects an external route which is a longer prefix within this /48, that longer prefix will not be aggregated by the “home router” and it cannot be filtered out of OSPF globally. Each other router /could/ have this same filter to ignore /49-128 external prefixes, but that doesn’t make sense.
In fact, if you have another router whose /48 is 2001:db8:ba5e::/48 but also acts as a backup router for ::cafe::/48, then if two customers from cafe connect to ba5e, their /56 prefixes will be injected into ospfv3 by the ba5e router, and your network will thus know to reach these customers on the backup router. (I think the cafe router might possibly ignore the /56 prefixes due to the filter, but I haven’t tested this particular scenario in IPv6 in ROS, so ymmv)