コード例 #1
0
ファイル: lapb_in.c プロジェクト: 513855417/linux
/*
 *	State machine for state 4, Frame Reject State.
 *	The handling of the timer(s) is in file lapb_timer.c.
 */
static void lapb_state4_machine(struct lapb_cb *lapb, struct sk_buff *skb,
				struct lapb_frame *frame)
{
	switch (frame->type) {
	case LAPB_SABM:
		lapb_dbg(1, "(%p) S4 RX SABM(%d)\n", lapb->dev, frame->pf);
		if (lapb->mode & LAPB_EXTENDED) {
			lapb_dbg(1, "(%p) S4 TX DM(%d)\n",
				 lapb->dev, frame->pf);
			lapb_send_control(lapb, LAPB_DM, frame->pf,
					  LAPB_RESPONSE);
		} else {
			lapb_dbg(1, "(%p) S4 TX UA(%d)\n",
				 lapb->dev, frame->pf);
			lapb_dbg(0, "(%p) S4 -> S3\n", lapb->dev);
			lapb_send_control(lapb, LAPB_UA, frame->pf,
					  LAPB_RESPONSE);
			lapb_stop_t1timer(lapb);
			lapb_stop_t2timer(lapb);
			lapb->state     = LAPB_STATE_3;
			lapb->condition = 0x00;
			lapb->n2count   = 0;
			lapb->vs        = 0;
			lapb->vr        = 0;
			lapb->va        = 0;
			lapb_connect_indication(lapb, LAPB_OK);
		}
		break;

	case LAPB_SABME:
		lapb_dbg(1, "(%p) S4 RX SABME(%d)\n", lapb->dev, frame->pf);
		if (lapb->mode & LAPB_EXTENDED) {
			lapb_dbg(1, "(%p) S4 TX UA(%d)\n",
				 lapb->dev, frame->pf);
			lapb_dbg(0, "(%p) S4 -> S3\n", lapb->dev);
			lapb_send_control(lapb, LAPB_UA, frame->pf,
					  LAPB_RESPONSE);
			lapb_stop_t1timer(lapb);
			lapb_stop_t2timer(lapb);
			lapb->state     = LAPB_STATE_3;
			lapb->condition = 0x00;
			lapb->n2count   = 0;
			lapb->vs        = 0;
			lapb->vr        = 0;
			lapb->va        = 0;
			lapb_connect_indication(lapb, LAPB_OK);
		} else {
			lapb_dbg(1, "(%p) S4 TX DM(%d)\n",
				 lapb->dev, frame->pf);
			lapb_send_control(lapb, LAPB_DM, frame->pf,
					  LAPB_RESPONSE);
		}
		break;
	}

	kfree_skb(skb);
}
コード例 #2
0
ファイル: lapb_in.c プロジェクト: 274914765/C
/*
 *    State machine for state 0, Disconnected State.
 *    The handling of the timer(s) is in file lapb_timer.c.
 */
static void lapb_state0_machine(struct lapb_cb *lapb, struct sk_buff *skb,
                struct lapb_frame *frame)
{
    switch (frame->type) {
        case LAPB_SABM:
#if LAPB_DEBUG > 1
            printk(KERN_DEBUG "lapb: (%p) S0 RX SABM(%d)\n",
                   lapb->dev, frame->pf);
#endif
            if (lapb->mode & LAPB_EXTENDED) {
#if LAPB_DEBUG > 1
                printk(KERN_DEBUG "lapb: (%p) S0 TX DM(%d)\n",
                       lapb->dev, frame->pf);
#endif
                lapb_send_control(lapb, LAPB_DM, frame->pf,
                          LAPB_RESPONSE);
            } else {
#if LAPB_DEBUG > 1
                printk(KERN_DEBUG "lapb: (%p) S0 TX UA(%d)\n",
                       lapb->dev, frame->pf);
#endif
#if LAPB_DEBUG > 0
                printk(KERN_DEBUG "lapb: (%p) S0 -> S3\n",
                       lapb->dev);
#endif
                lapb_send_control(lapb, LAPB_UA, frame->pf,
                          LAPB_RESPONSE);
                lapb_stop_t1timer(lapb);
                lapb_stop_t2timer(lapb);
                lapb->state     = LAPB_STATE_3;
                lapb->condition = 0x00;
                lapb->n2count   = 0;
                lapb->vs        = 0;
                lapb->vr        = 0;
                lapb->va        = 0;
                lapb_connect_indication(lapb, LAPB_OK);
            }
            break;

        case LAPB_SABME:
#if LAPB_DEBUG > 1
            printk(KERN_DEBUG "lapb: (%p) S0 RX SABME(%d)\n",
                   lapb->dev, frame->pf);
#endif
            if (lapb->mode & LAPB_EXTENDED) {
#if LAPB_DEBUG > 1
                printk(KERN_DEBUG "lapb: (%p) S0 TX UA(%d)\n",
                       lapb->dev, frame->pf);
#endif
#if LAPB_DEBUG > 0
                printk(KERN_DEBUG "lapb: (%p) S0 -> S3\n",
                       lapb->dev);
#endif
                lapb_send_control(lapb, LAPB_UA, frame->pf,
                          LAPB_RESPONSE);
                lapb_stop_t1timer(lapb);
                lapb_stop_t2timer(lapb);
                lapb->state     = LAPB_STATE_3;
                lapb->condition = 0x00;
                lapb->n2count   = 0;
                lapb->vs        = 0;
                lapb->vr        = 0;
                lapb->va        = 0;
                lapb_connect_indication(lapb, LAPB_OK);
            } else {
#if LAPB_DEBUG > 1
                printk(KERN_DEBUG "lapb: (%p) S0 TX DM(%d)\n",
                       lapb->dev, frame->pf);
#endif
                lapb_send_control(lapb, LAPB_DM, frame->pf,
                          LAPB_RESPONSE);
            }
            break;

        case LAPB_DISC:
#if LAPB_DEBUG > 1
            printk(KERN_DEBUG "lapb: (%p) S0 RX DISC(%d)\n",
                   lapb->dev, frame->pf);
            printk(KERN_DEBUG "lapb: (%p) S0 TX UA(%d)\n",
                   lapb->dev, frame->pf);
#endif
            lapb_send_control(lapb, LAPB_UA, frame->pf,
                      LAPB_RESPONSE);
            break;

        default:
            break;
    }

    kfree_skb(skb);
}
コード例 #3
0
ファイル: lapb_in.c プロジェクト: SergeAvdeyev/my_project
/*
 *	State machine for state 0, Disconnected State.
 *	The handling of the timer(s) is in file lapb_timer.c.
 */
void lapb_state0_machine(struct lapb_cs * lapb, struct lapb_frame * frame) {
	struct lapb_cs_internal * lapb_int = lapb_get_internal(lapb);

	switch (frame->type) {
		case LAPB_SABM:
			lapb->callbacks->debug(2, "[LAPB] S0 RX SABM(%d)", frame->pf);
			if (lapb_is_extended(lapb)) {
				lapb->callbacks->debug(2, "[LAPB] S0 TX DM(%d)", frame->pf);
				lapb_send_control(lapb, LAPB_DM, frame->pf, LAPB_RESPONSE);
			} else {
				lapb_stop_t201timer(lapb);
				lapb->callbacks->debug(2, "[LAPB] S0 TX UA(%d)", frame->pf);
				lapb_send_control(lapb, LAPB_UA, frame->pf, LAPB_RESPONSE);
				lapb_int->state     = LAPB_STATE_3;
				lapb_int->condition = 0x00;
				lapb_int->vs        = 0;
				lapb_int->vr        = 0;
				//lapb_int->last_vr	= 0;
				lapb_int->va        = 0;
				lapb->callbacks->debug(1, "[LAPB] S0 -> S3");
				lapb_connect_indication(lapb, LAPB_OK);
			};
			break;

		case LAPB_SABME:
			lapb->callbacks->debug(2, "[LAPB] S0 RX SABME(%d)", frame->pf);
			if (lapb_is_extended(lapb)) {
				lapb_stop_t201timer(lapb);
				lapb->callbacks->debug(2, "[LAPB] S0 TX UA(%d)", frame->pf);
				lapb_send_control(lapb, LAPB_UA, frame->pf, LAPB_RESPONSE);
				lapb_int->state     = LAPB_STATE_3;
				lapb_int->condition = 0x00;
				lapb_int->vs        = 0;
				lapb_int->vr        = 0;
				//lapb_int->last_vr	= 0;
				lapb_int->va        = 0;
				lapb->callbacks->debug(1, "[LAPB] S0 -> S3");
				lapb_connect_indication(lapb, LAPB_OK);
			} else {
				lapb->callbacks->debug(2, "[LAPB] S0 TX DM(%d)", frame->pf);
				lapb_send_control(lapb, LAPB_DM, frame->pf, LAPB_RESPONSE);
			};
			break;

		case LAPB_DM:
			if (!lapb->auto_connecting) break;
			lapb->callbacks->debug(2, "[LAPB] S0 RX DM(%d)", frame->pf);
			lapb_int->condition = 0x00;
			if (lapb_is_extended(lapb)) {
				lapb->callbacks->debug(2, "[LAPB] S0 TX SABME(1)");
				lapb_send_control(lapb, LAPB_SABME, LAPB_POLLON, LAPB_COMMAND);
			} else {
				lapb->callbacks->debug(2, "[LAPB] S0 TX SABM(1)");
				lapb_send_control(lapb, LAPB_SABM, LAPB_POLLON, LAPB_COMMAND);
			};
			lapb_int->state = LAPB_STATE_1;
			lapb->callbacks->debug(1, "[LAPB] S0 -> S1");
			break;

//		case LAPB_DISC:
//			lapb_debug(lapb, 1, "[LAPB] S0 RX DISC(%d)", frame->pf);
//			lapb_debug(lapb, 1, "[LAPB] S0 TX UA(%d)", frame->pf);
//			lapb_send_control(lapb, LAPB_UA, frame->pf, LAPB_RESPONSE);
//			break;

		default:
			break;
	};
}