[X25]: Fast select with no restriction on response
This patch is a follow up to patch 1 regarding "Selective Sub Address matching with call user data". It allows use of the Fast-Select-Acceptance optional user facility for X.25. This patch just implements fast select with no restriction on response (NRR). What this means (according to ITU-T Recomendation 10/96 section 6.16) is that if in an incoming call packet, the relevant facility bits are set for fast-select-NRR, then the called DTE can issue a direct response to the incoming packet using a call-accepted packet that contains call-user-data. This patch allows such a response. The called DTE can also respond with a clear-request packet that contains call-user-data. However, this feature is currently not implemented by the patch. How is Fast Select Acceptance used? By default, the system does not allow fast select acceptance (as before). To enable a response to fast select acceptance, After a listen socket in created and bound as follows socket(AF_X25, SOCK_SEQPACKET, 0); bind(call_soc, (struct sockaddr *)&locl_addr, sizeof(locl_addr)); but before a listen system call is made, the following ioctl should be used. ioctl(call_soc,SIOCX25CALLACCPTAPPRV); Now the listen system call can be made listen(call_soc, 4); After this, an incoming-call packet will be accepted, but no call-accepted packet will be sent back until the following system call is made on the socket that accepts the call ioctl(vc_soc,SIOCX25SENDCALLACCPT); The network (or cisco xot router used for testing here) will allow the application server's call-user-data in the call-accepted packet, provided the call-request was made with Fast-select NRR. Signed-off-by: Shaun Pereira <spereira@tusc.com.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
cb65d506c3
commit
ebc3f64b86
@@ -19,6 +19,8 @@
|
||||
* mar/20/00 Daniela Squassoni Disabling/enabling of facilities
|
||||
* negotiation.
|
||||
* jun/24/01 Arnaldo C. Melo use skb_queue_purge, cleanups
|
||||
* apr/04/15 Shaun Pereira Fast select with no
|
||||
* restriction on response.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
@@ -127,8 +129,12 @@ void x25_write_internal(struct sock *sk, int frametype)
|
||||
len += 1 + X25_ADDR_LEN + X25_MAX_FAC_LEN +
|
||||
X25_MAX_CUD_LEN;
|
||||
break;
|
||||
case X25_CALL_ACCEPTED:
|
||||
len += 1 + X25_MAX_FAC_LEN + X25_MAX_CUD_LEN;
|
||||
case X25_CALL_ACCEPTED: /* fast sel with no restr on resp */
|
||||
if(x25->facilities.reverse & 0x80) {
|
||||
len += 1 + X25_MAX_FAC_LEN + X25_MAX_CUD_LEN;
|
||||
} else {
|
||||
len += 1 + X25_MAX_FAC_LEN;
|
||||
}
|
||||
break;
|
||||
case X25_CLEAR_REQUEST:
|
||||
case X25_RESET_REQUEST:
|
||||
@@ -203,9 +209,16 @@ void x25_write_internal(struct sock *sk, int frametype)
|
||||
x25->vc_facil_mask);
|
||||
dptr = skb_put(skb, len);
|
||||
memcpy(dptr, facilities, len);
|
||||
dptr = skb_put(skb, x25->calluserdata.cudlength);
|
||||
memcpy(dptr, x25->calluserdata.cuddata,
|
||||
x25->calluserdata.cudlength);
|
||||
|
||||
/* fast select with no restriction on response
|
||||
allows call user data. Userland must
|
||||
ensure it is ours and not theirs */
|
||||
if(x25->facilities.reverse & 0x80) {
|
||||
dptr = skb_put(skb,
|
||||
x25->calluserdata.cudlength);
|
||||
memcpy(dptr, x25->calluserdata.cuddata,
|
||||
x25->calluserdata.cudlength);
|
||||
}
|
||||
x25->calluserdata.cudlength = 0;
|
||||
break;
|
||||
|
||||
|
Reference in New Issue
Block a user