+ case BGPTYPE_EXTD_COMMUNITIES:
+ if (len % 8) {
+ printf("invalid len");
+ break;
+ }
+ while (tlen>0) {
+ u_int8_t extd_comm,extd_comm_type,extd_comm_subtype;
+ extd_comm=*tptr;
+ extd_comm_type=extd_comm&0x3f;
+ extd_comm_subtype=*(tptr+1);
+ switch(extd_comm_type) {
+ case 0:
+ printf("%s%s%s:%u:%s%s",
+ (extd_comm&0x80) ? "vendor-specific: " : "",
+ (extd_comm&0x40) ? "non-transitive:" : "",
+ tok2str(bgp_extd_comm_subtype_values,
+ "unknown",
+ extd_comm_subtype&0x3f),
+ EXTRACT_16BITS(tptr+2),
+ getname(tptr+4),
+ (tlen>8) ? ", " : "");
+ break;
+ case 1:
+ printf("%s%s%s:%s:%u%s",
+ (extd_comm&0x80) ? "vendor-specific: " : "",
+ (extd_comm&0x40) ? "non-transitive:" : "",
+ tok2str(bgp_extd_comm_subtype_values,
+ "unknown",
+ extd_comm_subtype&0x3f),
+ getname(tptr+2),
+ EXTRACT_16BITS(tptr+6),
+ (tlen>8) ? ", " : "");
+ break;
+ case 2:
+ printf("%s%s%s:%u:%u%s",
+ (extd_comm&0x80) ? "vendor-specific: " : "",
+ (extd_comm&0x40) ? "non-transitive:" : "",
+ tok2str(bgp_extd_comm_subtype_values,
+ "unknown",
+ extd_comm_subtype&0x3f),
+ EXTRACT_32BITS(tptr+2),
+ EXTRACT_16BITS(tptr+6),
+ (tlen>8) ? ", " : "");
+ break;
+
+ default:
+ printf("\n\t no typecode %u decoder",
+ extd_comm_type);
+ print_unknown_data(tptr,"\n\t ",8);
+ break;
+ }
+ tlen -=8;
+ tptr +=8;
+ }
+ break;
+