diff --git a/drivers/isdn/hardware/mISDN/dss1.h b/drivers/isdn/hardware/mISDN/dss1.h index 4374a17..dcb6596 100644 --- a/drivers/isdn/hardware/mISDN/dss1.h +++ b/drivers/isdn/hardware/mISDN/dss1.h @@ -109,6 +109,7 @@ #define IE_CALLED_PN 0x70 #define IE_CALLED_SUB 0x71 #define IE_REDIR_NR 0x74 +#define IE_REDIR_DN 0x76 #define IE_TRANS_SEL 0x78 #define IE_RESTART_IND 0x79 #define IE_LLC 0x7c diff --git a/drivers/isdn/hardware/mISDN/l3_udss1.c b/drivers/isdn/hardware/mISDN/l3_udss1.c index 80fd7ce..25476f1 100644 --- a/drivers/isdn/hardware/mISDN/l3_udss1.c +++ b/drivers/isdn/hardware/mISDN/l3_udss1.c @@ -245,7 +245,7 @@ compose_msg(struct sk_buff *skb, Q931_info_t *qi) *p = buf[qi->congestion_level.off]; } ie = &qi->bearer_capability; - for (i=0; i<32; i++) { + for (i=0; i<33; i++) { if (ie[i].off) { l = buf[ie[i].off + 1] +1; p = skb_put(skb, l + 1); @@ -414,10 +414,10 @@ l3dss1_msg_without_setup(l3_process_t *pc, u_char cause) } static int ie_ALERTING[] = {IE_BEARER, IE_CHANNEL_ID | IE_MANDATORY_1, - IE_FACILITY, IE_PROGRESS, IE_DISPLAY, IE_SIGNAL, IE_HLC, - IE_USER_USER, -1}; + IE_FACILITY, IE_PROGRESS, IE_DISPLAY, IE_SIGNAL, IE_REDIR_DN, + IE_HLC, IE_USER_USER, -1}; static int ie_CALL_PROCEEDING[] = {IE_BEARER, IE_CHANNEL_ID | IE_MANDATORY_1, - IE_FACILITY, IE_PROGRESS, IE_DISPLAY, IE_HLC, -1}; + IE_FACILITY, IE_PROGRESS, IE_DISPLAY, IE_REDIR_DN, IE_HLC, -1}; static int ie_CONNECT[] = {IE_BEARER, IE_CHANNEL_ID | IE_MANDATORY_1, IE_FACILITY, IE_PROGRESS, IE_DISPLAY, IE_DATE, IE_SIGNAL, IE_CONNECT_PN, IE_CONNECT_SUB, IE_LLC, IE_HLC, IE_USER_USER, -1}; @@ -501,6 +501,7 @@ struct ie_len max_ie_len[] = { {IE_CALLED_PN, 24}, {IE_CALLED_SUB, 23}, {IE_REDIR_NR, 255}, + {IE_REDIR_DN, 255}, {IE_TRANS_SEL, 255}, {IE_RESTART_IND, 3}, {IE_LLC, 18}, @@ -552,7 +553,7 @@ check_infoelements(l3_process_t *pc, struct sk_buff *skb, int *checklist) iep = &qi->bearer_capability; oldpos = -1; - for (i=0; i<32; i++) { + for (i=0; i<33; i++) { if (iep[i].off) { ie = mISDN_l3_pos2ie(i); if ((newpos = ie_in_set(pc, ie, cl))) { diff --git a/drivers/isdn/hardware/mISDN/l3helper.c b/drivers/isdn/hardware/mISDN/l3helper.c index e2371f3..46fd72c 100644 --- a/drivers/isdn/hardware/mISDN/l3helper.c +++ b/drivers/isdn/hardware/mISDN/l3helper.c @@ -22,14 +22,15 @@ static signed char _mISDN_l3_ie2pos[128] = { 13,-1,14,15,16,17,18,19,-1,-1,-1,-1,20,21,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,22,23,-1,-1, - 24,25,-1,-1,26,-1,-1,-1,27,28,-1,-1,29,30,31,-1 + 24,25,-1,-1,26,-1,27,-1,28,29,-1,-1,30,31,32,-1 }; -static unsigned char _mISDN_l3_pos2ie[32] = { +static unsigned char _mISDN_l3_pos2ie[33] = { 0x04, 0x08, 0x10, 0x14, 0x18, 0x1c, 0x1e, 0x20, 0x27, 0x28, 0x29, 0x2c, 0x34, 0x40, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x4c, 0x4d, 0x6c, 0x6d, - 0x70, 0x71, 0x74, 0x78, 0x79, 0x7c, 0x7d, 0x7e + 0x70, 0x71, 0x74, 0x76, 0x78, 0x79, 0x7c, 0x7d, + 0x7e }; signed int @@ -224,7 +225,7 @@ void mISDN_LogL3Msg(struct sk_buff *skb) ps += L3_EXTRA_SIZE; printk(KERN_DEBUG "L3Msg type(%02x) qi(%p) ies(%p) ps(%p)\n", qi->type, qi, ies, ps); - for (i=0;i<32;i++) { + for (i=0;i<33;i++) { if (ies[i].off) { p = ps + ies[i].off; t = tmp; diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index effeb23..505bc41 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h @@ -728,6 +728,7 @@ typedef struct _Q931_info { ie_info_t called_nr; ie_info_t called_sub; ie_info_t redirect_nr; + ie_info_t redirect_dn; ie_info_t transit_net_sel; ie_info_t restart_ind; ie_info_t llc;