SVN 3080: NIC Registration


  • Developer

    Registration registers eth0 regardless of connection state.

    Version: SVN 3080
    Server OS: Debian
    NIC Not Used: eth0
    NIC Used: eth1

    PXE works fine on eth1 for me. Once the quick registration option is selected, it registers eth0 and carries on. Of course, it won’t recognize the machine on boot for imaging tasks until the MAC address is manually changed. Upon changing the MAC address to the eth1 adapter, the imaging process works fine.

    This may be related to the [URL=‘http://fogproject.org/forum/threads/multiple-nic-hosts.12511/’]other bug I reported earlier[/URL] regarding multiple NIC hosts having trouble with any tasks.


  • Developer

    [quote=“Tom Elliott, post: 43684, member: 7271”]inventory.php doesn’t do the registering, only auto.register.php handles this. 3102 should work, but I don’t have multiple macs to test against either.[/quote]

    Still figuring out where everything is going. :)

    I was looking at fog.register, not fog.auto.reg. That would make sense! I’ll see if I can figure out what it is doing for you.


  • Senior Developer

    inventory.php doesn’t do the registering, only auto.register.php handles this. 3102 should work, but I don’t have multiple macs to test against either.


  • Developer

    I just gave SVN 3102 a shot. The new code does what it should, but only the first MAC is registered (no additional MACs are registered). I lucked out and had it register eth1 instead of eth0. That’s good for me, but maybe not for someone else.

    I don’t fully understand the inventory.php execution yet, but it must be only grabbing the first MAC and discards the rest.


  • Moderator

    [quote=“Uncle Frank, post: 43632, member: 28116”]sed, grep, tr and all the rest are very nice but we don’t really need them here, do we?
    [CODE]… cat /sys/class/net/[^l][^o]*/address …[/CODE]

    And still wondering about if ‘IFS’ is needed here. Sorry goto go now.[/quote]

    Very usefull, I’ll use in my script !


  • Developer

    [quote=“Tom Elliott, post: 43634, member: 7271”]Uncle Frank, cspence’s means no loops either![/quote]
    Ohhhhh yes, now I see! Shouldn’t work till very late as I seem to overlook things too often then…

    I’d vote for bash string manipulation…
    [CODE]# Get All Active MAC Addresses
    getMACAddresses()
    {
    macs=$(cat /sys/class/net/[^l][^o]*/address | tr ‘\n’ ‘|’)
    echo -n ${macs%$’|’}
    }[/CODE]
    Just make sure we use BASH (not SH) because the terrorist style (lol) shell glob does not work with SH…


  • Senior Developer

    lol
    it means to cat all directories EXCEPT those with l, then o (or in this case lo)



  • [quote=“Uncle Frank, post: 43632, member: 28116”]
    [CODE]… cat /sys/class/net/[^l][^o]*/address …[/CODE]
    [/quote]

    What does that even mean?
    I know DOS and VB, some Oracle… That stuff is so foreign I feel like it’s terrorist related lol


  • Developer

    [quote=“Tom Elliott, post: 43634, member: 7271”]Uncle Frank, cspence’s means no loops either![/quote]

    Moments like these are why I love collaborating with others on code. Just a few suggestions and the code collapses to nothing.


  • Senior Developer

    Uncle Frank, cspence’s means no loops either!


  • Senior Developer

    I like it


  • Developer

    sed, grep, tr and all the rest are very nice but we don’t really need them here, do we?
    [CODE]… cat /sys/class/net/[^l][^o]*/address …[/CODE]

    And still wondering about if ‘IFS’ is needed here. Sorry goto go now.


  • Developer

    How low can we go?

    [CODE]# Get All Active MAC Addresses
    getMACAddresses()
    {
    lomac=00:00:00:00:00:00
    cat /sys/class/net/*/address | grep -v $lomac | tr ‘\n’ ‘|’ | sed s/.$//g
    }[/CODE]


  • Developer

    [CODE]… cat /sys/class/net/???*/address …[/CODE] kind of hackish but…


  • Developer

    [quote=“Uncle Frank, post: 43627, member: 28116”]I don’t think so…
    [CODE]# Get All Active MAC Addresses
    getMACAddresses()
    {
    IFS=$’\n’
    # Create a pipe-separated MAC List
    for macline in $(cat /sys/class/net/*/address); do
    # Add a pipe before adding more MACs
    if [ -n “$mac” ]; then
    mac=$mac|
    fi
    mac=${mac}${macline};
    done
    IFS=
    echo $mac
    }[/CODE]
    No ip, no awk, no grep…[/quote]

    It grabs lo’s MAC. But I like where this is going…


  • Developer

    And I still wonder, why do we need the IFS here??


  • Developer

    [quote=“Tom Elliott, post: 43626, member: 7271”]We have to know the exact path name, so it’s simpler to just use the tools that get that for us I think.[/quote]
    I don’t think so…
    [CODE]# Get All Active MAC Addresses
    getMACAddresses()
    {
    IFS=$’\n’
    # Create a pipe-separated MAC List
    for macline in $(cat /sys/class/net/*/address); do
    # Add a pipe before adding more MACs
    if [ -n “$mac” ]; then
    mac=$mac|
    fi
    mac=${mac}${macline};
    done
    IFS=
    echo $mac
    }[/CODE]
    No ip, no awk, no grep…


  • Senior Developer

    [quote=“Uncle Frank, post: 43623, member: 28116”]Not using any extra ip tools … /sys/class/net/*/address …[/quote]

    We have to know the exact path name, so it’s simpler to just use the tools that get that for us I think.


  • Senior Developer

    yeah I saw and edited. The echo needs to occur there. and I am using just ip addr


  • Developer

    [code]# Get All Active MAC Addresses
    getMACAddresses()
    {
    IFS=$’\n’
    # Create a pipe-separated MAC List
    for macline in $(ip addr | grep link/ether | awk ‘{print $2}’); do
    # Add a pipe before adding more MACs
    if [ -n “$mac” ]; then
    mac=$mac|
    fi
    mac=${mac}${macline};
    done
    IFS=
    echo $mac
    }[/code]

    Caught a bug with your final mac= statement. Also, “ip addr” is fine by itself.


 

472
Online

41.8k
Users

12.3k
Topics

115.9k
Posts