/[Intel-AMT]/trunk/lib/Intel/AMT/Redir.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/Intel/AMT/Redir.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9 - (hide annotations)
Sun Aug 9 12:49:48 2009 UTC (14 years, 9 months ago) by dpavlin
File size: 2117 byte(s)
get data from SOL

1 dpavlin 8 package Intel::AMT::Redir;
2    
3     use warnings;
4     use strict;
5    
6     use IO::Socket::INET;
7     use Data::Dump qw/dump/;
8    
9     our $sock;
10    
11 dpavlin 9 my $MAX_TRANSMIT_BUFFER = 1000;
12     my $TRANSMIT_BUFFER_TIMEOUT = 100;
13     my $TRANSMIT_OVERFLOW_TIMEOUT = 0;
14     my $HOST_SESSION_RX_TIMEOUT = 10000;
15     my $HOST_FIFO_RX_FLUSH_TIMEOUT = 0;
16     my $HEARTBEAT_INTERVAL = 5000;
17    
18 dpavlin 8 sub connect {
19     my ( $host ) = shift;
20     my $port = 16994;
21    
22     my $user = 'admin';
23     my $passwd = $ENV{AMT_PASSWORD};
24    
25     warn 'connect ', $host, ':', $port;
26    
27     $sock = IO::Socket::INET->new(
28     PeerAddr => $host,
29     PeerPort => $port,
30     );
31    
32     $sock->autoflush(1);
33    
34 dpavlin 9 put( pack('C4A4', 0x10, 0, 0, 0, "SOL ")
35     , 'start redirection session' );
36     get( 0x11, 13
37     , 'start redirection session reply' );
38 dpavlin 8
39     my $credentials = pack('CA*CA*', length($user), $user, length($passwd), $passwd);
40    
41 dpavlin 9 put( pack('C9', 0x13, 0, 0, 0, 0x01, length($credentials), 0, 0, 0) . $credentials
42     , 'autheniticate session' );
43     get( 0x14, 9
44     , 'authenticate session reply' );
45 dpavlin 8
46 dpavlin 9 put(
47     pack('C8v6C4',
48     0x20, 0,0,0,
49     0,0,0,0,
50     $MAX_TRANSMIT_BUFFER,
51     $TRANSMIT_BUFFER_TIMEOUT,
52     $TRANSMIT_OVERFLOW_TIMEOUT,
53     $HOST_SESSION_RX_TIMEOUT,
54     $HOST_FIFO_RX_FLUSH_TIMEOUT,
55     $HEARTBEAT_INTERVAL,
56     0,0,0,0,
57     )
58     , 'start sol redirection' );
59     get( 0x21, 23
60     , 'start sol redirection reply' );
61    
62     my $send = "\r";
63    
64     put(
65     pack('C8v', 0x28,0,0,0, 0,0,0,0, length($send) ) . $send,
66     'sol data to host'
67     );
68     my $host = get( 0x2a, -10, 'sol data from host' );
69    
70 dpavlin 8 }
71    
72 dpavlin 9 sub hdump {
73     my ($data,$desc) = @_;
74     my $out = unpack('H*', $data);
75     $out =~ s/(.{16})/$1 /g;
76     $out =~ s/(\S\S)/$1 /g;
77     warn $desc ? "# $desc\n$out\n" : "$out\n";
78     }
79    
80 dpavlin 8 sub put {
81 dpavlin 9 my ( $data, $desc ) = @_;
82     hdump $data, $desc;
83 dpavlin 8 syswrite $sock, $data, length($data);
84     }
85    
86     sub get {
87 dpavlin 9 my ( $expect, $len, $desc ) = @_;
88 dpavlin 8
89     my $reply;
90 dpavlin 9 sysread $sock,$reply,abs($len);
91     hdump $reply, $desc;
92 dpavlin 8
93     my ( $op, $error ) = unpack('CC', $reply);
94     die "expected $expect got $op" unless $op == $expect;
95     die "error" unless $error == 0x00;
96    
97 dpavlin 9 if ( $len < 0 ) {
98     $len = unpack('x8v', $reply);
99     warn "len: $len\n";
100     sysread $sock, $reply, $len;
101     hdump $reply, 'data';
102     }
103    
104 dpavlin 8 return $reply;
105     }
106    
107     1;
108    

  ViewVC Help
Powered by ViewVC 1.1.26