#include "unp.h" void print_notification(char *notify_buf) { union sctp_notification *snp; struct sctp_assoc_change *sac; struct sctp_paddr_change *spc; struct sctp_remote_error *sre; struct sctp_send_failed *ssf; struct sctp_shutdown_event *sse; struct sctp_adaption_event *ae; struct sctp_pdapi_event *pdapi; const char *str; snp = (union sctp_notification *)notify_buf; switch(snp->sn_header.sn_type) { case SCTP_ASSOC_CHANGE: sac = &snp->sn_assoc_change; switch(sac->sac_state) { case SCTP_COMM_UP: str = "COMMUNICATION UP"; break; case SCTP_COMM_LOST: str = "COMMUNICATION LOST"; break; case SCTP_RESTART: str = "RESTART"; break; case SCTP_SHUTDOWN_COMP: str = "SHUTDOWN COMPLETE"; break; case SCTP_CANT_STR_ASSOC: str = "CAN'T START ASSOC"; break; default: str = "UNKNOWN"; break; } /* end switch(sac->sac_state) */ printf("SCTP_ASSOC_CHANGE: %s, assoc=0x%x\n", str, (uint32_t)sac->sac_assoc_id); break; case SCTP_PEER_ADDR_CHANGE: spc = &snp->sn_paddr_change; switch(spc->spc_state) { case SCTP_ADDR_AVAILABLE: str = "ADDRESS AVAILABLE"; break; case SCTP_ADDR_UNREACHABLE: str = "ADDRESS UNREACHABLE"; break; case SCTP_ADDR_REMOVED: str = "ADDRESS REMOVED"; break; case SCTP_ADDR_ADDED: str = "ADDRESS ADDED"; break; case SCTP_ADDR_MADE_PRIM: str = "ADDRESS MADE PRIMARY"; break; default: str = "UNKNOWN"; break; } /* end switch(spc->spc_state) */ printf("SCTP_PEER_ADDR_CHANGE: %s, addr=%s, assoc=0x%x\n", str, Sock_ntop((SA *)&spc->spc_aaddr, sizeof(spc->spc_aaddr)), (uint32_t)spc->spc_assoc_id); break; case SCTP_REMOTE_ERROR: sre = &snp->sn_remote_error; printf("SCTP_REMOTE_ERROR: assoc=0x%x error=%d\n", (uint32_t)sre->sre_assoc_id, sre->sre_error); break; case SCTP_SEND_FAILED: ssf = &snp->sn_send_failed; printf("SCTP_SEND_FAILED: assoc=0x%x error=%d\n", (uint32_t)ssf->ssf_assoc_id, ssf->ssf_error); break; case SCTP_ADAPTION_INDICATION: ae = &snp->sn_adaption_event; printf("SCTP_ADAPTION_INDICATION: 0x%x\n", (u_int)ae->sai_adaption_ind); break; case SCTP_PARTIAL_DELIVERY_EVENT: pdapi = &snp->sn_pdapi_event; if(pdapi->pdapi_indication == SCTP_PARTIAL_DELIVERY_ABORTED) printf("SCTP_PARTIAL_DELIEVERY_ABORTED\n"); else printf("Unknown SCTP_PARTIAL_DELIVERY_EVENT 0x%x\n", pdapi->pdapi_indication); break; case SCTP_SHUTDOWN_EVENT: sse = &snp->sn_shutdown_event; printf("SCTP_SHUTDOWN_EVENT: assoc=0x%x\n", (uint32_t)sse->sse_assoc_id); break; default: printf("Unknown notification event type=0x%x\n", snp->sn_header.sn_type); } }