# $Header: Ptdpm14.pm 31-dec-2003.11:38:36 skumar Exp $
#
# Package : Ptdpm14.pm
#
# Copyright (c) 2002, 2003, Oracle Corporation.  All rights reserved.  
#
#   NAME
#       Ptdpm14.pm
#
#   DESCRIPTION
#       Collects Network Interface details
#
#   NOTES
#
#   MODIFIED     (MM/DD/YY)
#      skumar     12/31/03 - AIX changes 
#      mgoodric   09/27/04 - code cleanup
#      mgoodric   05/11/03 - added -debug tracing
#      mgoodric   04/08/03 - fix finding MAC address
#      goramamo   12/12/02 - Changes for SPARC III+ machines
#      goramamo   09/03/02 - goramamo_nic_flags_correction
#      goramamo   09/03/02 - Created by removing the code in Ptdpm1.pm
#                            for better maintenance
#
##*************************************************************

use strict;

package Ptdpm14;

use Carp;
require 5.005;

#require 5.6.1;
require Exporter;

use Ptdpm0;
use Ptdpm2;
use Ptdpm3;

#******************************************
#   Export Subroutines
#******************************************

@Ptdpm14::ISA    = ('Exporter');
@Ptdpm14::EXPORT = qw(
  &getNetworkInterfaceDetails
  );

#******************************************
#     Global Variables
#******************************************

use constant NIL => '';

#******************************************
#   Exported Subroutines
#******************************************

sub getNetworkInterfaceDetails
{
    debugTrace('Calling... getNetworkInterfaceDetails()');

    my @nicdata = ();

    my $bcad = NIL;
    my $mac  = NIL;
    my @nic1 = ();
    my @nic2 = ();
    my @nic3 = ();
    my @nic4 = ();
    my @nic5 = ();
    my @nic6 = ();
    my @nic7 = ();
    my @mac1 = ();
    my @mac2 = ();
    my $name = NIL;
    my $rest = NIL;
    my $inet = NIL;
    my $i    = 0;
    my $j    = 0;
    my $l    = 0;
    my $k    = 0;
    my $m    = 0;
    my $n    = 0;
    my $p    = 0;
    my $q    = 0;

    my $validEntry = 0;
    my $noOfNICs   = 0;
    my $noOfMacAds = 0;

    my @nic = getNICDetails();
    $noOfNICs = scalar(@nic);
    $q        = $noOfNICs - 1;

    for ($i = 0 ; $i < $noOfNICs ; $i++)
    {

        #chomp($nic[$i]);$j++;
        $validEntry = 0;
        for ($p = $i ; $p < $noOfNICs ; $p++)
        {
            if (index($nic[$p], ':') > 0 && index($nic[$p], "flags=") > 0)
            {
                $i = $p;
                $validEntry = 1;
                last;
            }
        }
        if ($validEntry)
        {
            @nic1 = split ("flags", $nic[$i]);
            $nic1[0] = trim($nic1[0]);
            @nic5 = split (':', $nic1[0]);
            $name = join (':', @nic5);
            $nicdata[$j++] = joinValue($Ptdpm2::NIC_NAME_TAG, $name);

            # To sort the flags in alphabetical order to make comparison easier
            # in : flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST>
            # out: BROADCAST,MULTICAST,NOTRAILERS,RUNNING,UP
            @nic3 = split ('=', $nic[$i]);
            ($rest, $nic3[1]) = split ('<', $nic3[1], 2);
            ($nic3[1], $rest) = split ('>', $nic3[1], 2);
            @nic6 = split (',', $nic3[1]);
            @nic7 = sort(@nic6);
            $nic3[1] = join (',', @nic7);
            $nic3[1] = trim($nic3[1]);
            $nicdata[$j++] = joinValue($Ptdpm2::FLAGS_TAG, $nic3[1]);

            $i++;

            @nic1 = split ("ipmtu", $nic[$i]);

            @nic4 = split (' ', $nic1[1]);
            $nic4[0] = int($nic4[0]);
            $nic4[0] = trim($nic4[0]);
            $nicdata[$j] = joinValue($Ptdpm2::MAX_TRANSFER_UNIT_TAG, $nic4[0]);

            @nic2 = split (' ', $nic[$i]);
            for ($k = 0 ; $k < 4 ; $k++)
            {
                if (!defined $nic2[$k])
                {
                    $nic2[$k] = NIL;
                }
            }
            $inet = trim($nic2[1]);

            $nicdata[$j++] = joinValue($Ptdpm2::INET_ADDRESS_TAG, $inet);
            $nicdata[$j++] = joinValue($Ptdpm2::MASK_TAG, $nic2[3]);
            if ($nic[$i] =~ /broadcast/)
            {
                $bcad = $nic2[5];
            }
            else { $bcad = NIL; }
            $nicdata[$j++] = joinValue($Ptdpm2::BROADCAST_ADDRESS_TAG, $bcad);

            $mac = getMACAddress($inet);
            if (index($mac, "no entry") > -1
                || index($mac, "unknown host") > -1
                || $mac eq NIL)
            {
                $mac2[0] = NIL;
            }
            else
            {
                @mac1 = ();
                @mac2 = ();

                @mac1 = split (" at ", $mac);
                @mac2 = split (' ',    $mac1[1]);
            }
            $nicdata[$j++] = joinValue($Ptdpm2::MAC_ADDRESS_TAG, $mac2[0]);

            #$inet = join (' ', 'hosts', $inet);
            getHostName();
            my $aliases   = getAdminEntries($Ptdpm0::hostname);
            my @hosts     = split (' ', $aliases);
            my @hostnames = ();
            $m = scalar(@hosts);
            $n = 0;
            for ($l = 0 ; $l < $m ; $l++)
            {

                if (index($aliases, $Ptdpm0::hostname) > -1 && $n == 0)
                {
                    $hostnames[0] = $Ptdpm0::hostname;
                    $n++;
                }
                elsif ($hosts[$l] eq $nic2[1]
                       || $hosts[$l] eq $Ptdpm0::hostname)
                {
                }
                else { $hostnames[$n++] = $hosts[$l];  }
            }

            $aliases = join (',', @hostnames);
            $nicdata[$j++] = joinValue($Ptdpm2::HOSTNAME_ALIASES_TAG, $aliases);
        }
    }
    return @nicdata;
}

1;

# End of the Program

