From 368a0a73d4f673c9baa8dc61585e7868fea923c3 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Fri, 7 Jan 2011 16:54:46 +0100 Subject: [PATCH] ipa: Only use one IPA number for Osmo extensions Instead of using more numbers from the proto range we will use the 0xee and then have a mini header with our new proto id in there. For a start rename the use types to _OLD. --- openbsc/include/openbsc/ipaccess.h | 11 +++++++++-- openbsc/src/bsc/osmo_bsc_msc.c | 4 ++-- openbsc/src/nat/bsc_filter.c | 2 +- openbsc/src/nat/bsc_mgcp_utils.c | 4 ++-- openbsc/src/nat/bsc_nat.c | 2 +- openbsc/src/nat/bsc_nat_utils.c | 2 +- openbsc/src/nat/bsc_ussd.c | 2 +- 7 files changed, 17 insertions(+), 10 deletions(-) diff --git a/openbsc/include/openbsc/ipaccess.h b/openbsc/include/openbsc/ipaccess.h index b37022038..1d00d9792 100644 --- a/openbsc/include/openbsc/ipaccess.h +++ b/openbsc/include/openbsc/ipaccess.h @@ -14,14 +14,21 @@ struct ipaccess_head { u_int8_t data[0]; } __attribute__ ((packed)); +struct ipaccess_head_ext { + uint8_t proto; + uint8_t data[0]; +} __attribute__ ((packed)); + enum ipaccess_proto { IPAC_PROTO_RSL = 0x00, IPAC_PROTO_IPACCESS = 0xfe, IPAC_PROTO_SCCP = 0xfd, IPAC_PROTO_OML = 0xff, + /* OpenBSC extensions */ - IPAC_PROTO_MGCP = 0xfc, + IPAC_PROTO_OSMO = 0xee, + IPAC_PROTO_MGCP_OLD = 0xfc, }; enum ipaccess_msgtype { @@ -32,7 +39,7 @@ enum ipaccess_msgtype { IPAC_MSGT_ID_ACK = 0x06, /* OpenBSC extension */ - IPAC_MSGT_SCCP_STATE = 0xff, + IPAC_MSGT_SCCP_OLD = 0xff, }; enum ipaccess_id_tags { diff --git a/openbsc/src/bsc/osmo_bsc_msc.c b/openbsc/src/bsc/osmo_bsc_msc.c index 8b23c6f4a..b0c00444b 100644 --- a/openbsc/src/bsc/osmo_bsc_msc.c +++ b/openbsc/src/bsc/osmo_bsc_msc.c @@ -67,7 +67,7 @@ static int mgcp_do_read(struct bsc_fd *fd) } mgcp->l2h = msgb_put(mgcp, ret); - msc_queue_write(data->msc_con, mgcp, IPAC_PROTO_MGCP); + msc_queue_write(data->msc_con, mgcp, IPAC_PROTO_MGCP_OLD); return 0; } @@ -223,7 +223,7 @@ static int ipaccess_a_fd_cb(struct bsc_fd *bfd) } } else if (hh->proto == IPAC_PROTO_SCCP) { sccp_system_incoming(msg); - } else if (hh->proto == IPAC_PROTO_MGCP) { + } else if (hh->proto == IPAC_PROTO_MGCP_OLD) { mgcp_forward(data, msg); } diff --git a/openbsc/src/nat/bsc_filter.c b/openbsc/src/nat/bsc_filter.c index f22f5bee1..73e987893 100644 --- a/openbsc/src/nat/bsc_filter.c +++ b/openbsc/src/nat/bsc_filter.c @@ -69,7 +69,7 @@ static struct bsc_pkt_filter white_list[] = { { IPAC_PROTO_SCCP, ALLOW_ANY, ALLOW_ANY, ALLOW_ANY, FILTER_TO_BOTH }, /* allow MGCP messages to both sides */ - { IPAC_PROTO_MGCP, ALLOW_ANY, ALLOW_ANY, ALLOW_ANY, FILTER_TO_BOTH }, + { IPAC_PROTO_MGCP_OLD, ALLOW_ANY, ALLOW_ANY, ALLOW_ANY, FILTER_TO_BOTH }, }; struct bsc_nat_parsed *bsc_nat_parse(struct msgb *msg) diff --git a/openbsc/src/nat/bsc_mgcp_utils.c b/openbsc/src/nat/bsc_mgcp_utils.c index dc8cd81b6..aacfce6eb 100644 --- a/openbsc/src/nat/bsc_mgcp_utils.c +++ b/openbsc/src/nat/bsc_mgcp_utils.c @@ -303,7 +303,7 @@ int bsc_mgcp_policy_cb(struct mgcp_config *cfg, int endpoint, int state, const c } /* send the message and a fake MDCX to force sending of a dummy packet */ - bsc_write(sccp->bsc, bsc_msg, IPAC_PROTO_MGCP); + bsc_write(sccp->bsc, bsc_msg, IPAC_PROTO_MGCP_OLD); bsc_mgcp_send_mdcx(sccp->bsc, sccp->bsc_endp, mgcp_endp); return MGCP_POLICY_DEFER; } else if (state == MGCP_ENDP_DLCX) { @@ -312,7 +312,7 @@ int bsc_mgcp_policy_cb(struct mgcp_config *cfg, int endpoint, int state, const c bsc_mgcp_dlcx(sccp); return MGCP_POLICY_CONT; } else { - bsc_write(sccp->bsc, bsc_msg, IPAC_PROTO_MGCP); + bsc_write(sccp->bsc, bsc_msg, IPAC_PROTO_MGCP_OLD); return MGCP_POLICY_DEFER; } } diff --git a/openbsc/src/nat/bsc_nat.c b/openbsc/src/nat/bsc_nat.c index 046f38c11..a0bebf13b 100644 --- a/openbsc/src/nat/bsc_nat.c +++ b/openbsc/src/nat/bsc_nat.c @@ -958,7 +958,7 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg) goto exit2; break; } - } else if (parsed->ipa_proto == IPAC_PROTO_MGCP) { + } else if (parsed->ipa_proto == IPAC_PROTO_MGCP_OLD) { bsc_mgcp_forward(bsc, msg); goto exit2; } else { diff --git a/openbsc/src/nat/bsc_nat_utils.c b/openbsc/src/nat/bsc_nat_utils.c index 05868f947..aba082d4d 100644 --- a/openbsc/src/nat/bsc_nat_utils.c +++ b/openbsc/src/nat/bsc_nat_utils.c @@ -262,7 +262,7 @@ int bsc_write_mgcp(struct bsc_connection *bsc, const uint8_t *data, unsigned int msg->l3h = msgb_put(msg, length); memcpy(msg->l3h, data, length); - return bsc_write(bsc, msg, IPAC_PROTO_MGCP); + return bsc_write(bsc, msg, IPAC_PROTO_MGCP_OLD); } int bsc_write(struct bsc_connection *bsc, struct msgb *msg, int proto) diff --git a/openbsc/src/nat/bsc_ussd.c b/openbsc/src/nat/bsc_ussd.c index 378fbc50f..c121abe5d 100644 --- a/openbsc/src/nat/bsc_ussd.c +++ b/openbsc/src/nat/bsc_ussd.c @@ -281,7 +281,7 @@ static int forward_ussd(struct sccp_connections *con, const struct ussd_request memcpy(copy->l2h, input->l2h, msgb_l2len(input)); msg->l2h = msgb_put(msg, 1); - msg->l2h[0] = IPAC_MSGT_SCCP_STATE; + msg->l2h[0] = IPAC_MSGT_SCCP_OLD; /* fill out the data */ state = (struct ipac_msgt_sccp_state *) msgb_put(msg, sizeof(*state));