static int check_b(int *pile1, int *pile2, char **buf, int r[3][5]) { if (r[0][2] > 1 && r[2][0]) return ((my_sx(pile2, r[0][2]) && !ff("SWAP B", "sb ", buf, r[0])) ? 0 : 1); else if (r[0][2] > 1 && r[2][1]) { if (!r[1][0] && r[1][1]) return ((my_rr(pile1, pile2, r[0][1], r[0][2]) && !ff("ROTATE C", "rr ", buf, r[0])) ? 0 : 1); return ((my_rx(pile2, r[0][2]) && !ff("ROTATE B", "rb ", buf, r[0])) ? 0 : 1); } else if (r[0][2] > 1 && r[2][2]) { if (!r[1][0] && r[1][2]) return ((my_rrr(pile1, pile2, r[0][1], r[0][2]) && !ff("REVERSE C", "rrr ", buf, r[0])) ? 0 : 1); return ((my_rrx(pile2, r[0][2]) && !ff("REVERSE B", "rrb ", buf, r[0])) ? 0 : 1); } else if ((r[0][1] && r[0][3] != r[0][1]) || !r[0][2]) return ((my_px(pile2, pile1, r[0][2]++, r[0][1]--) && !ff("PUSH B", "pb ", buf, r[0])) ? 0 : 1); else return ((my_px(pile1, pile2, r[0][1]++, r[0][2]--) && !ff("PUSH A", "pa ", buf, r[0])) ? 0 : 1); }
static int check_a(int *pile1, int *pile2, char **buf, int r[3][5]) { if (r[0][1] > 1 && r[1][0] && !(r[1][1] || r[1][2])) { if (r[0][2] > 1 && r[2][0]) return ((my_ss(pile1, pile2, r[0][1], r[0][2]) && !ff("SWAP C", "ss ", buf, r[0])) ? 0 : 1); return ((my_sx(pile1, r[0][1]) && !ff("SWAP A", "sa ", buf, r[0])) ? 0 : 1); } else if (r[0][1] > 1 && r[1][1]) { if (r[0][2] > 1 && !r[2][0] && r[2][1]) return ((my_rr(pile1, pile2, r[0][1], r[0][2]) && !ff("ROTATE C", "rr ", buf, r[0])) ? 0 : 1); return ((my_rx(pile1, r[0][1]) && !ff("ROTATE A", "ra ", buf, r[0])) ? 0 : 1); } else if (r[0][1] > 1 && r[1][2]) { if (r[0][2] > 1 && !r[2][0] && r[2][2]) return ((my_rrr(pile1, pile2, r[0][1], r[0][2]) && !ff("REVERSE C", "rrr ", buf, r[0])) ? 0 : 1); return ((my_rrx(pile1, r[0][1]) && !ff("REVERSE A", "rra ", buf, r[0])) ? 0 : 1); } return (-1); }
static int my_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { int i; printk(KERN_INFO "my_hard_start_xmit(%s)\n", dev->name); dev->trans_start = jiffies; printk(KERN_INFO "Sending packet :\n"); /* print out 16 bytes per line */ for (i = 0; i < skb->len; ++i) { if ((i & 0xf) == 0) printk(KERN_INFO "\n "); printk(KERN_INFO "%02x ", skb->data[i]); } printk(KERN_INFO "\n"); ++stats->tx_packets; /* loopback it */ my_rx(skb, dev); return 0; }
int my_rr(int *pile1, int *pile2, int size1, int size2) { return (my_rx(pile1, size1) && my_rx(pile2, size2)); }