[GPRS] Add Frame Relay in GRE encapsulation for NS
diff --git a/openbsc/include/openbsc/gb_proxy.h b/openbsc/include/openbsc/gb_proxy.h
index ad0405f..40c88d2 100644
--- a/openbsc/include/openbsc/gb_proxy.h
+++ b/openbsc/include/openbsc/gb_proxy.h
@@ -13,6 +13,8 @@
u_int32_t nsip_listen_ip;
u_int16_t nsip_listen_port;
+ int frgre_enabled;
+
u_int16_t nsip_sgsn_nsei;
/* misc */
diff --git a/openbsc/include/openbsc/gprs_ns.h b/openbsc/include/openbsc/gprs_ns.h
index 08519f2..319ff3d 100644
--- a/openbsc/include/openbsc/gprs_ns.h
+++ b/openbsc/include/openbsc/gprs_ns.h
@@ -107,6 +107,7 @@
enum gprs_ns_ll {
GPRS_NS_LL_UDP,
GPRS_NS_LL_E1,
+ GPRS_NS_LL_FR_GRE,
};
enum gprs_ns_evt {
@@ -130,15 +131,14 @@
uint16_t timeout[NS_TIMERS_COUNT];
- /* which link-layer are we based on? */
- enum gprs_ns_ll ll;
-
- union {
- /* NS-over-IP specific bits */
- struct {
- struct bsc_fd fd;
- } nsip;
- };
+ /* NS-over-IP specific bits */
+ struct {
+ struct bsc_fd fd;
+ } nsip;
+ /* NS-over-FR-over-GRE-over-IP specific bits */
+ struct {
+ struct bsc_fd fd;
+ } frgre;
};
enum nsvc_timer_mode {
@@ -168,10 +168,16 @@
struct rate_ctr_group *ctrg;
+ /* which link-layer are we based on? */
+ enum gprs_ns_ll ll;
+
union {
struct {
struct sockaddr_in bts_addr;
} ip;
+ struct {
+ struct sockaddr_in bts_addr;
+ } frgre;
};
};
@@ -181,15 +187,11 @@
/* Destroy a NS protocol instance */
void gprs_ns_destroy(struct gprs_ns_inst *nsi);
-/* Listen for incoming GPRS packets */
-int nsip_listen(struct gprs_ns_inst *nsi, uint16_t udp_port);
+/* Listen for incoming GPRS packets via NS/UDP */
+int nsip_listen(struct gprs_ns_inst *nsi, uint32_t ip, uint16_t udp_port);
struct sockaddr_in;
-/* main entry point, here incoming NS frames enter */
-int gprs_ns_rcvmsg(struct gprs_ns_inst *nsi, struct msgb *msg,
- struct sockaddr_in *saddr);
-
/* main function for higher layers (BSSGP) to send NS messages */
int gprs_ns_sendmsg(struct gprs_ns_inst *nsi, struct msgb *msg);
@@ -197,8 +199,8 @@
int gprs_ns_tx_block(struct gprs_nsvc *nsvc, uint8_t cause);
int gprs_ns_tx_unblock(struct gprs_nsvc *nsvc);
-/* Listen for incoming GPRS packets */
-int nsip_listen(struct gprs_ns_inst *nsi, uint16_t udp_port);
+/* Listen for incoming GPRS packets via NS/FR/GRE */
+int gprs_ns_frgre_listen(struct gprs_ns_inst *nsi, uint32_t ip);
/* Establish a connection (from the BSS) to the SGSN */
struct gprs_nsvc *nsip_connect(struct gprs_ns_inst *nsi,
@@ -216,4 +218,7 @@
/* Add NS-specific VTY stuff */
int gprs_ns_vty_init(struct gprs_ns_inst *nsi);
+#define NS_ALLOC_SIZE 1024
+
+
#endif
diff --git a/openbsc/include/openbsc/socket.h b/openbsc/include/openbsc/socket.h
index f2e264e..4d31611 100644
--- a/openbsc/include/openbsc/socket.h
+++ b/openbsc/include/openbsc/socket.h
@@ -8,7 +8,7 @@
#define IPPROTO_GRE 47
#endif
-int make_sock(struct bsc_fd *bfd, int proto, u_int16_t port,
+int make_sock(struct bsc_fd *bfd, int proto, u_int32_t ip, u_int16_t port,
int (*cb)(struct bsc_fd *fd, unsigned int what));
#endif /* _BSC_SOCKET_H */